将列表框项传递给另一个表单上的文本框c#

时间:2013-10-18 11:54:24

标签: c# listbox listboxitem

我在c#中使用Visual Studio制作这个简单的Windows窗体应用程序。我有两种形式。在form1上我有一个文本框,列表框和两个按钮(一个从文本框插入列表框,另一个打开form2)。在form2上我只有一个文本框。我只是想要,当单击form1上的按钮(用于打开form2),打开form2以及从form1的列表框中包含(在formLoad上)所选项目的文本框。但是,当我点击按钮时,它会显示“对象引用未设置为对象的实例”。我究竟做错了什么?我很确定它很简单,但我无法得到它。

提前致谢!

这是我的代码:

form1上的

  public partial class Form1 : Form
  {
    public Form1()
    {
        InitializeComponent();
    }

    private void btnOpenForm2_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        listBox1.Items.Add(textBox1.Text);
    }
    public string Transfer
    {
        get { return listBox1.SelectedItem.ToString(); }
    }

并在form2上:

 public partial class Form2 : Form
  {
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        textBox1.Text = f1.Transfer;
    }

4 个答案:

答案 0 :(得分:1)

在Form2_Load方法中,您正在创建对象Form1的新实例,与现有项目分开。

相反,您需要: a)将对当前Form1对象的引用传递给Form2,以便Form2可以访问Transfer属性。 或b)向Form2添加一个新属性(称为Transfer,比如说),然后在创建Form2时,将当前文本框值分配给此属性,如下所示:

Form2 f2 = new Form2();
f2.Transfer = listBox1.SelectedItem.ToString();
f2.ShowDialog();

你也可以通过向Form2的构造函数添加一个参数来做到这一点,尽管这确实是一个设计决定。

答案 1 :(得分:1)

因为在Form2_Load事件中,您始终创建Form1的新实例,然后访问访问Transfer的{​​{1}}属性,该属性未为新创建的表单设置

您应该在按钮事件中将引用传递给表单1:

form1上的

listBox1.SelectedItem

并在form2上:

private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(this);
    f2.ShowDialog();
}

答案 2 :(得分:0)

因为你没有选择你的列表框项,所以值listBox1.SelectedItem为null。执行try catch block的实践

答案 3 :(得分:0)

您正在此处创建新的Form1实例,该实例与您用于打开Form2的Form1实例无关:

private void Form2_Load(object sender, EventArgs e)
{
    Form1 f1 = new Form1(); // here is new instance of Form1 created
    textBox1.Text = f1.Transfer;
}

因此,这个新的Form1实例没有选择的项目,并且您有错误。我建议您在打开Form2时将所选项值传递给Form2:

private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(Transfer); // pass selected item value to constructor
    f2.ShowDialog();
}

您只需要更改Form2构造函数以接受此字符串:

public Form2(string transfer)
{
    InitializeComponent();
    textBox1.Text = transfer;
}