通过单击Form2中的按钮将项目添加到Form3中的CheckedListBox

时间:2016-11-02 07:04:50

标签: c# asp.net windows-forms-designer

我有三个表格,例如Form1,Form2,Form3。每当我单击Form2中的按钮时,它应该在Form3中的CheckedListBox中添加一个项目。在Form1中,每当我点击一个按钮时,它应该显示更新的Form3的CheckedListBox(即更新的checkedlistbox,它是由Form2中的单击按钮引起的)。任何人都可以帮助我吗?

在这里输入代码

2 个答案:

答案 0 :(得分:0)

添加一个新的Singleton Factory类,它有助于彼此共享表单对象,如下所示:

public class FormFactory
{
    Dictionary<string, Form> forms = new Dictionary<string, Form>();
    private static FormFactory _factory;

    public void SetForm(string name, Form form)
    {
        forms[name] = form;
    }

    public Form GetForm(string name)
    {
        if (forms.ContainsKey(name))
            return forms[name];
        return null;
    }

    private FormFactory()
    {

    }

    static FormFactory()
    {
        _factory = new FormFactory();
    }

    public static FormFactory Instance
    {
        get
        {
            return _factory;
        }
    }
}

更改您要从私有内部共享的所有控件的访问修饰符。例如:

internal System.Windows.Forms.CheckedListBox checkedListBox1;

在form1中添加表单加载方法,如下所示:

private void Form1_Load(object sender, EventArgs e)
{
    FormFactory.Instance.SetForm("Form1", this);
}

现在,您可以使用以下代码在Form3的button1上单击Form2时在FormList3的checkedListBox1中添加项目:

   private void button1_Click(object sender, EventArgs e)
    {
        Form3 form3 = FormFactory.Instance.GetForm("Form3") as Form1;
        if(form3!=null)
        {
            form3.checkedListBox1.Items.Add("Item" + form3.checkedListBox1.Items.Count);
        }
    }

答案 1 :(得分:-1)

您可以使用&#34; EventAggregator模式&#34; 来解决此问题。