所以这就是我要找的东西。我想在编译程序的同时加载两个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值。我尝试使用谷歌搜索,但还没有找到一种有效的方法:/
答案 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);
}