传递Forms参数并调用其事件

时间:2018-05-22 09:10:06

标签: c# .net winforms methods

MDIParent(frmMain)表单是一个主窗口,带有3个菜单项的菜单条,即frmSales,frmProducts,frmCustomers。每一个都是一个我需要调用为模态的形式,而不是每次调用它时都不实例化。我已成功完成此操作,但是我想创建一个方法,将表单名称作为参数,但我还需要调用相应的FormClose事件,无论我传入哪个表单。

这是frmMain中的代码我试图通过在每次选择菜单条项时简单地调用方法来最小化。只是要清楚,我所拥有的代码是按照预期工作,但id喜欢看到创建的方法对此。

以下是从记忆中输入记事本,所以可能会有一些错误,但你会理解它:

frmSales SalesForm;
frmProducts ProductsForm;
frmCustomers CustormersForm;

private void ShowChildFormModal (Form myFormName)
{
    if(myFormName = null)
    {
        myFormName= new myFormName(); // is this correct ?
        myFormName.MDIParent = this; // referring to frMain - MDIParent

        // now i need to call the OnClosed Event for the form in the 
        // parameter so i can set it to null :
        myFormName_FormClose += EventHandler (FormClosed, EventArgs)  
        myFormName.Show()
    }
    else
    {
        myFormName.Activate();
    }
}

private void frmSales_OnClosed (object sender, EventArgs e)
{
    SalesForm = null;
}

private void frmProducts_OnClosed (object sender, EventArgs e)
{
    ProductsForm = null;
}

private void frmCustomers_OnClosed (object sender, EventArgs e)
{
    CustomersForm = null;
}

1 个答案:

答案 0 :(得分:1)

您可以使用带有表单名称的字典及其表示形式,如下所示:

SalesForm salesForm = new SalesForm();
ProuctsForm productForm = new ProuctsForm();
CustormersForm customerForm = new CustormersForm();



Dictionary <string,Form> MyForms = new Dictionary<string,Form>();

MyForms["sales"] = salesForm;

MyForms["products"] = productForm;

MyForms["customer"] = customerForm;

// Set Your properties and events you want here

private void ShowChildFormModal (string myFormName)
{
    if(myFormName = null && MyForms[myFormName] !=null)
    {       
        MyForms[myFormName].MDIParent = this; // referring to frMain - MDIParent

        MyForms[myFormName].myFormName_FormClose += EventHandler (FormClosed, EventArgs)  ;
        MyForms[myFormName].ShowModal();
    }
    else
    {
        // Else what you need to do ??
    }
}