System.Windows.Forms.TextBox不会更改ref文本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了System.Windows.Forms.TextBox不会更改ref文本相关的知识,希望对你有一定的参考价值。
我有以下代码作为弹出对话框,从inputBox获取输入。我传入字符串作为参考希望ref字符串在对话框关闭时改变,所以我可以得到用户输入。但传入的字符串在关闭对话框时没有改变。我做错了什么?
public static DialogResult ShowInputDialog(ref string input1, ref string input2)
{
var size = new System.Drawing.Size(520, 180);
var inputBox = new Form { ClientSize = size };
var panel = new TableLayoutPanel
{
Size = new System.Drawing.Size(460, 180),
Location = new System.Drawing.Point(25, 15),
ColumnCount = 2,
RowCount = 3
};
// Add ColumnStyles/RowStyles here
panel.Controls.Add(new Label { Text = "Input 1", TextAlign = ContentAlignment.BottomRight }, 0, 0);
panel.Controls.Add(new Label { Text = "Input2", TextAlign = ContentAlignment.BottomRight }, 0, 1);
panel.Controls.Add(new TextBox { Text = input1, Width = 280 }, 1, 0);
panel.Controls.Add(new TextBox { Text = input2, Width = 280 }, 1, 1);
var okButton = new Button{ DialogResult = DialogResult.OK};
var cancelButton = new Button {DialogResult = DialogResult.Cancel};
var buttons = new FlowLayoutPanel();
buttons.Controls.Add(okButton);
buttons.Controls.Add(cancelButton);
panel.Controls.Add(buttons, 1, 3);
inputBox.Controls.Add(panel);
inputBox.AcceptButton = okButton;
inputBox.CancelButton = cancelButton;
var result = inputBox.ShowDialog();
return result;
}
上述代码的用法是:
string input1 = string.Empty;
string input2 = string.Empty;
ShowInputDialog(ref input, ref input2);
答案
我对TableLayoutPanel
不太熟悉,但也许你可以做一些简单的事情:
if (inputBox.ShowDialog() == DialogResult.OK)
{
input1 = (panel.GetControlFromPosition(1, 0) as TextBox).Text;
input2 = (panel.GetControlFromPosition(1, 1) as TextBox).Text;
return DialogResult.OK;
}
return DialogResult.Cancel;
您目前的问题是,在对话框关闭后,您实际上并未在任何位置设置值。
但是,我同意这个评论。一种MVVM模式可能会使维护(和创建)这些类型的属性及其各自的值变得更加容易。
另一答案
用户单击确定按钮后,您必须将textbox.text值分配回input1和input2
以上是关于System.Windows.Forms.TextBox不会更改ref文本的主要内容,如果未能解决你的问题,请参考以下文章