C#VSTO Winform Control访问来自动态创建的Form的控件

时间:2018-08-08 18:09:40

标签: c# winforms vsto excel-addins

我有一个 Excel 加载项,该加载项调用具有列表框的Windows窗体。在显示表单之前,我想基于 Excel 中的值动态填充ListBox

Winform如下所示:

enter image description here

功能区中的按钮单击如下所示:

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    Form1 fm = new Form1();
    System.Windows.Forms.ListBox lbx = fm.Controls.Find("listBox1", true).FirstOrDefault() as System.Windows.Forms.ListBox;
    lbx.Items.AddRange(new object[] { 1, 2, 3, 4, 5 });
    fm.Show();
}

System.Windows.Forms.ListBox lbx = fm.Controls.Find("listBox1", true).FirstOrDefault() as System.Windows.Forms.ListBox;

访问ListBox并向其中添加Item的最佳方法?
还是还有其他方法?

2 个答案:

答案 0 :(得分:1)

在您的方案中,由于每次创建新Form1实例时都希望显示它,并且由于它是自定义表单,因此我只需修改表单的构造函数以接受输入数据即可。

public Form1(object[] ListBoxData)
{
   ...
   listBox1.Items.AddRange(ListBoxData);
}

然后您可以在单击按钮时简单地传递值;

Form1 fm = new Form1(new object[] { 1, 2, 3, 4, 5 });
fm.Show();

答案 1 :(得分:0)

根据Chetan的建议: 属性:

 public object[] ListBoxData
        {
            set
            {
                listBox1.Items.AddRange(value);
            }
        }

按钮单击更改:

 Form1 fm = new Form1();
            fm.ListBoxData = new object[] { 1, 2, 3, 4, 5 };
            fm.Show();