双击列表框中的项目后,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.cspublic (或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();