以两种不同的形式在列表框之间传递整数

时间:2015-05-17 23:36:46

标签: c# forms winforms

所以这就是我要找的东西。我想在编译程序的同时加载两个WinForms。它们都包含两个列表框,Form1中的listBoxBid和listBoxAsk以及Form2中的listBoxBid2和listBoxAsk2。在Form1中,您可以通过在文本框中键入值并单击提交按钮来提交出价。提交出价时,它应显示在Form 1中的listBoxBid和Form2中的listBoxBid2中。我已经成功了......

public partial class Form2 : Form
{
  public int getBid(myBid)
    {
      return listBoxBid2.Items.Add(myBid);
    {
{

......然后......

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

    Form2 form2 = new Form2();
    List<int> bids = new List<int>();

private void buttonBid_Click(object sender, System.EventArgs e)
{
   \\some code to convert text to output

    form2.getBid(output);
{

所以这很有效。但是,在Form2中,所有的Ask值都已生成,我希望它们在listBoxAsk和listBoxAsk2中显示。但是当我使用与出价相同的方法时,我得到一个StackOverflow异常(这是有道理的,因为激活form1会激活form2,然后激活另一个form1 ......等等)。

所以我的问题是,如何从表单2到表单1的listBoxAsk获取Ask值。我尝试使用谷歌搜索,但还没有找到一种有效的方法:/

1 个答案:

答案 0 :(得分:0)

在实例化Form1时传递对Form2的引用:

public partial class Form2 : Form
{
  private readonly Form1 _form1;

  public Form2(Form1 frm) {
      _form1 = frm;
  }

  public int getBid(myBid)
  {
      return listBoxBid2.Items.Add(myBid);
  }
}

这允许您在创建时将Form1的实例传递给Form2

form2 = new Form2(this);

然后,您可以在Form2中编写一个方法,将项目添加到Form1

void AddItemsToMainForm(object[] items) {
    _form1.listBox.Items.AddRange(items);
}