双击列表框中的项目后,C#文本不会显示在其他表单上
我正在做一个winform,它包含一个列表框(listbox10),上面有一些项目。 当我双击一个项目时,它将显示另一个表单(Form3),它包含一个文本框(textbox1),文本框的文本是我选择的项目。 以下是我的编码。
Form3 msgForm3; private void listBox10_DoubleClick(object sender, EventArgs e) { msgForm3 = new Form3(); textBox1.Text = listBox10.SelectedItem.ToString(); msgForm3.Show(); }
但不知怎的,我不知道为什么,文本框总是空的。 我的编码有什么问题吗?
您正在访问的textBox1
不在msgForm3
。 访问msgForm3
使用的msgForm3
(正如其他答案所提到的那样)
msgForm3.textBox1.Text = listBox10.SelectedItem.ToString();
但由于默认情况下所有表单控件都是private
,因此您可以将Form3.Designer.cs
保护级别Form3.Designer.cs
为public
(或internal
):
public System.Windows.Forms.TextBox textBox1;
或者在textbox1
添加应该作为参数的文本作为Form3构造函数中的参数:
public Form3(string text) { InitializeComponent(); this.textBox1.Text = text; }
当你创建一个Form3实例时使用
msgForm3 = new Form3(listBox10.SelectedItem.ToString());
这是您访问其他表单成员的方法。
msgForm3 = new Form3(); msgForm3.textBox1.Text = listBox10.SelectedItem.ToString(); msgForm3.Show();
编辑:
从Form3.Designer.cs
文件中只需将保护级别从private
更改为public
。
更换
private System.Windows.Forms.TextBox textBox1;
至
public System.Windows.Forms.TextBox textBox1;
假设textbox1是msgForm3中的一个控件,那么正确的语法应该是
msgForm3.textBox1.Text = listBox10.SelectedItem.ToString();
这需要使用“表单设计器”属性窗口将textBox1的属性Modifiers从Private更改为Public。
我不建议这种改变。 最好像这样在msgForm3的构造函数中传递新值
msgForm3 = new Form3(listBox10.SelectedItem.ToString()); msgForm3.Show();
然后在msgForm3的构造函数中添加
public Form3(string initialValue) { InitializeComponent(); this.textBox1.Text = initialValue; }
或者你可以像这样添加一个公共方法到你的Form3类
public void InitText(string initialValue){this.textBox1.Text = initialValue;
}
并以这种方式打电话
msgForm3 = new Form3(); msgForm3.InitText(listBox10.SelectedItem.ToString()); msgForm3.Show();