在一个button事件中,根据传入不同的string类型的参数,show不同的窗体出来,因为窗体很多,有没有另外的方法,简化一下switch (e.Tool.Key.ToString())
{
                case "a":
                    a.show();
                    break;
                case "b":
                    b.show();
                    break;
                case "c":
                    ....
}

解决方案 »

  1.   

    写个方法不可以么?private void showWindow(一个参数类型, 一个窗体名称)
      

  2.   

    private void dgv_Data_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                switch (PageState)
                {
                    case WinState.Add://编辑(新增)
                        tspbtn_Modify_Click(sender, e);
                        break;
                    case WinState.Modify://编辑
                        tspbtn_Modify_Click(sender, e);
                        break;
                    case WinState.Audit://审核
                        tspbtn_Audit_Click(sender, e);
                        break;
                    case WinState.Close://关闭
                        tspbtn_Close_Click(sender, e);
                        break;
                    case WinState.Browse://列表
                        tspBtn_Detail_Click(sender, e);
                        break;
                    default://列表
                        tspBtn_Detail_Click(sender, e);
                        break;
                }
            }这是我的
      

  3.   

    private void tspBtn_Detail_Click(object sender, EventArgs e)
            {
                try
                {
                    if (dgv_Data.SelectedRows.Count > 0)
                    {
                        string path = AppDomain.CurrentDomain.BaseDirectory + @"config\receipt\ItemTransApply.xml";
                        FrmItemTranApply frm = new FrmItemTranApply(path);
                        frm.PageState = WinState.Browse;
                        frm.lngItemTransApplyeId = dgv_Data.SelectedRows[0].Cells["flngitemtransapplyid"].Value.ToInt();
                        string fchrAudit = dgv_Data.SelectedRows[0].Cells["fchraudit"].Value.ToStr();
                        if (fchrAudit == "已审核")
                        {
                            frm.lnlVisibleState = 1;
                        }
                        foreach (Form childrenForm in Application.OpenForms) //遍历已经激活的窗体   
                        {
                            if (childrenForm.Name == "frmRetail")  //保证窗体可以前后移动的设置
                            {
                                frm.MdiParent = childrenForm;
                            }                        if (childrenForm is FrmItemTranApply)  //重新激活已经打开的窗体        
                            {
                                childrenForm.Visible = true;
                                childrenForm.Activate();
                                return;
                            }
                        }
                        frm.ParentForm = this;//子父窗体的关联
                        frm.Show();//打开窗体
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("发生未知错误:" + ex.Message, "美承业务系统", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
            }其中一个窗体
      

  4.   

    http://www.okhan.net/article/sort021/sort0324/info-3661.htmlhttp://www.cnblogs.com/dcba1112/archive/2011/07/14/2106471.html
      

  5.   

    告诉你一个比较笨的方法!用一个变量 比如 Dictionary<string,Form> dicForm 把字符串根窗体都存起来 掉的时候 
    string fName = e.Tool.Key.ToString();
    Form f = dicForm[fname];
    f.Show();