我正在做一个winform,它包含一个列表框(listbox10),上面有一些项目。当我双击一个项目时,它将显示另一个表单(Form3),它包含一个文本框(textbox1),文本框的文本是我选择的项目。以下是我的编码。
Form3 msgForm3;
private void listBox10_DoubleClick(object sender, EventArgs e)
{
msgForm3 = new Form3();
textBox1.Text = listBox10.SelectedItem.ToString();
msgForm3.Show();
}
但不知怎的,我不知道为什么,文本框总是空的。我的编码有什么问题吗?
答案 0 :(得分:2)
您正在访问的textBox1
不在msgForm3
上。访问msgForm3
使用的那个(正如其他答案所提到的)
msgForm3.textBox1.Text = listBox10.SelectedItem.ToString();
但由于默认情况下所有表单控件均为private
,您可以将其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());
答案 1 :(得分:1)
假设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();
答案 2 :(得分:1)
这是您访问其他表单成员的方法。
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;