none
請問如何動態建立特定的Form? RRS feed

  • 問題

  •  

    假設我已經寫好了100個不同的Form (Form1, Form2, Form3....., Form100)

    另外還寫了個function要根據傳入的字串,決定動態Create 特定的Form:

           

    Code Snippet

    private void creat_prog(string new_form)
      {
        if (new_form == "Form1")
        {
           Form1 new_prog = new Form1();
           new_prog.Show();
        }
        if (new_form == "Form2")
        {
            Form2 new_prog = new Form2();
            new_prog.Show();
        }
        if (new_form == "Form3")
        {
            Form3 new_prog = new Form3();
            new_prog.Show();
        }

        //以下省略 ...... 
      }

     

     

    雖然上面的寫法可以跑,但看起來就很笨,因為每多1個Form,就要多寫個五行.....

    所以想請問在動態建立時,有更好的方法嗎,或是任何建議都可以,謝謝 ^_^

     

    2007年9月18日 下午 02:05

解答

  • 試看看下列的作法,用起來語法可以比較簡潔些:

    Code Snippet
    void ShowForm(String FormName)
     {
       Assembly frmMain = Assembly.GetEntryAssembly();
       System.Type formType = frmMain.GetType("Form的Namespace." + FormName);
       object pc = Activator.CreateInstance(formType);
       Form frm = (Form)pc;
       frm.ShowDialog();   
     }

     

     

    參考來源:http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=53288

     

    2007年9月18日 下午 04:16
    版主

所有回覆

  • Code Snippet

            private void creat_prog(string new_form)
            {
                Form new_prog;
                switch (new_form)
                {
                    case "Form1": new_prog = new Form1(); break;
                    case "Form2": new_prog = new Form2(); break;
                    case "Form3": new_prog = new Form3(); break;
                    default: new_prog = new Form1(); break;
                }
                new_prog.Show();
            }

     

     

     

    阿 Q 勝利法,這樣每一個 case 看起來都只要一行 Big Smile~~~~~

     

    2007年9月18日 下午 03:01
  • 試看看下列的作法,用起來語法可以比較簡潔些:

    Code Snippet
    void ShowForm(String FormName)
     {
       Assembly frmMain = Assembly.GetEntryAssembly();
       System.Type formType = frmMain.GetType("Form的Namespace." + FormName);
       object pc = Activator.CreateInstance(formType);
       Form frm = (Form)pc;
       frm.ShowDialog();   
     }

     

     

    參考來源:http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=53288

     

    2007年9月18日 下午 04:16
    版主
  •  

    感謝兩位的回答

     

    2007年9月19日 上午 05:35