1

我正在做一个包含一个列表框(listbox10)的winform,上面有一些项目。当我双击一个项目时,它将显示另一个表单 (Form3),其中包含一个文本框 (textbox1),文本框的文本是我选择的项目。下面是我的编码。

Form3 msgForm3;
private void listBox10_DoubleClick(object sender, EventArgs e)
{

    msgForm3 = new Form3();
    textBox1.Text = listBox10.SelectedItem.ToString();
    msgForm3.Show();
}

但不知何故,我不知道为什么,文本框总是空的。我的编码有什么问题吗?

4

3 回答 3

2

您正在访问的textBox1不在msgForm3。访问正在msgForm3使用的(正如其他答案所提到的)

msgForm3.textBox1.Text = listBox10.SelectedItem.ToString(); 

但由于private默认情况下所有表单控件都是您可以将其内部保护级别更改Form3.Designer.cspublic(或internal) :

public System.Windows.Forms.TextBox textBox1;

或在 Form3 构造函数中添加应textbox1作为参数输入的文本:

public Form3(string text)
{
    InitializeComponent();
    this.textBox1.Text = text;
}

当您创建 Form3 的实例时,请使用

msgForm3 = new Form3(listBox10.SelectedItem.ToString());
于 2012-10-09T08:24:54.483 回答
1

假设 textbox1 是 msgForm3 中的一个控件,那么正确的语法应该是

msgForm3.textBox1.Text = listBox10.SelectedItem.ToString(); 

这需要使用 Form Designer 属性窗口将 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();  
于 2012-10-09T08:18:07.797 回答
1

这是您可以访问其他表单的成员的方式。

msgForm3 = new Form3();
msgForm3.textBox1.Text = listBox10.SelectedItem.ToString();
msgForm3.Show();

编辑:

Form3.Designer.cs文件中只需将保护级别从更改privatepublic.

代替

private System.Windows.Forms.TextBox textBox1;

public System.Windows.Forms.TextBox textBox1;
于 2012-10-09T08:19:54.397 回答