双击列表框中的项目后,C#文本不会显示在其他表单上

时间:2012-10-09 08:15:22

标签: 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();
}

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

3 个答案:

答案 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;