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

C# 将listbox项传递给另一个表单c上的文本框#,c#,listbox,listboxitem,C#,Listbox,Listboxitem,我正在用c#在Visual studio中制作这个简单的Windows窗体应用程序。我有两张表格。在form1上,我有一个textbox、listbox和两个按钮(一个用于从textbox插入listbox,另一个用于打开form2)。在form2上,我只有一个文本框。我只是想,当单击form1上的按钮(用于打开form2)时,form2打开,textbox包含(在formLoad上)form1列表框中的选定项。但当我点击按钮时,它显示“对象引用未设置为对象的实例”。我做错了什么?我很确定这很简

我正在用c#在Visual studio中制作这个简单的Windows窗体应用程序。我有两张表格。在form1上,我有一个textbox、listbox和两个按钮(一个用于从textbox插入listbox,另一个用于打开form2)。在form2上,我只有一个文本框。我只是想,当单击form1上的按钮(用于打开form2)时,form2打开,textbox包含(在formLoad上)form1列表框中的选定项。但当我点击按钮时,它显示“对象引用未设置为对象的实例”。我做错了什么?我很确定这很简单,但我就是搞不懂

提前谢谢

这是我的密码:

表格1:

  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(); }
    }
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(this);
    f2.ShowDialog();
}
表格2:

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

    private void Form2_Load(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        textBox1.Text = f1.Transfer;
    }
public partial class Form2 : Form
{
   Form1 f1;
   public Form2(Form1 f1)
   {
       this.f1 = f1;
       InitializeComponent();
   }

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

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

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

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

您也可以通过向Form2的构造函数添加一个参数来实现这一点,尽管这实际上是一个设计决策。

在Form2\u加载方法中,您正在创建一个与现有项分离的对象Form1的新实例

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

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

您也可以通过向Form2的构造函数添加一个参数来实现这一点,尽管这实际上是一个设计决策。

在Form2\u加载方法中,您正在创建一个与现有项分离的对象Form1的新实例

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

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

您也可以通过向Form2的构造函数添加一个参数来实现这一点,尽管这实际上是一个设计决策。

在Form2\u加载方法中,您正在创建一个与现有项分离的对象Form1的新实例

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

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

您也可以通过向Form2的构造函数添加一个参数来实现这一点,尽管这实际上是一个设计决策。

因为在
Form2\u Load
事件中,您总是创建
Form1
的一个新实例,然后访问访问
Transfer
属性,该属性访问
listBox1。选择EdItem
,该属性不是为新创建的表单设置的

您更应该在按钮事件中传递对表单1的引用:

表格1:

  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(); }
    }
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(this);
    f2.ShowDialog();
}
表格2:

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

    private void Form2_Load(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        textBox1.Text = f1.Transfer;
    }
public partial class Form2 : Form
{
   Form1 f1;
   public Form2(Form1 f1)
   {
       this.f1 = f1;
       InitializeComponent();
   }

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

因为在
Form2\u Load
事件中,您总是创建
Form1
的一个新实例,然后访问
Transfer
属性,该属性访问
listBox1。SelectedItem
未为新创建的表单设置

您更应该在按钮事件中传递对表单1的引用:

表格1:

  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(); }
    }
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(this);
    f2.ShowDialog();
}
表格2:

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

    private void Form2_Load(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        textBox1.Text = f1.Transfer;
    }
public partial class Form2 : Form
{
   Form1 f1;
   public Form2(Form1 f1)
   {
       this.f1 = f1;
       InitializeComponent();
   }

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

因为在
Form2\u Load
事件中,您总是创建
Form1
的一个新实例,然后访问
Transfer
属性,该属性访问
listBox1。SelectedItem
未为新创建的表单设置

您更应该在按钮事件中传递对表单1的引用:

表格1:

  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(); }
    }
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(this);
    f2.ShowDialog();
}
表格2:

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

    private void Form2_Load(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        textBox1.Text = f1.Transfer;
    }
public partial class Form2 : Form
{
   Form1 f1;
   public Form2(Form1 f1)
   {
       this.f1 = f1;
       InitializeComponent();
   }

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

因为在
Form2\u Load
事件中,您总是创建
Form1
的一个新实例,然后访问
Transfer
属性,该属性访问
listBox1。SelectedItem
未为新创建的表单设置

您更应该在按钮事件中传递对表单1的引用:

表格1:

  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(); }
    }
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(this);
    f2.ShowDialog();
}
表格2:

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

    private void Form2_Load(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        textBox1.Text = f1.Transfer;
    }
public partial class Form2 : Form
{
   Form1 f1;
   public Form2(Form1 f1)
   {
       this.f1 = f1;
       InitializeComponent();
   }

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

因为您尚未选择listbox项目,所以值listBox1.SelectedItem为空。因为您尚未选择listbox项目,所以请练习执行try-catch-block,值listBox1.SelectedItem为空。因为您尚未选择listbox项目,所以请练习执行try-catch-block,值listBox1.SelectedItem为空。练习执行try-catch块

,因为您尚未选择列表框项,值listBox1.SelectedItem为空。练习执行try-catch块

您正在此处创建新的
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;
}

您正在此处创建新的
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;
}

您正在此处创建新的
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;
}

您正在创建新的
Form1