2016-11-05 10 views
0

私はプログラミングの初心者です。私は多くのフォームで小さなアプリケーションを作成しようとします。メソッドを使用してこのフォームのインスタンスを作成してフォームを開く方法を説明したいと思います。フォームの新規インスタンスを作成するメソッド

は、私が実際にこれを持っている:

private void firtsToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if(myForm == null) 
     { 
      myForm = new MyForm(); 
      myForm.MdiParent = this; 
      myForm.FormClosing += myFormForm_FormClosing; 
      myForm.Show(); 
     } 
     else 
     { 
      myForm.Activate(); 
     } 
    } 

    void myForm_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     myForm = null; 
    } 

私は多くのツールストリップのメニューを処理したい、と私はそれらのそれぞれにそのコードをwrtiteしたくないので、私は任意のフォームを開くためのいくつかの方法を書きたいです別のタイプ。

+0

コードをFormClosingが不要であることを。 – LarsTech

+0

素晴らしい。私たちはあなたが望むものについて少しの情報を持っています。だから、あなたの質問は何ですか?何が問題になっていますか?あなたが試したことをはっきりと示す良い[mcve]を提供して、そのコードが何をしているのか、そして何をしたいのかを正確に説明してください。 –

+0

私はちょうど、どのクラスのインスタンスを作成することができるメソッドを作成する方法を望んでいた。私は各処理ボタンでこれを20回書く必要はありませんでした – Igor

答えて

0

これは、各クラスの最大1つのMDI子フォームを表示することができます:

// Stores references to form of each type: 
private Dictionary<Type, Form> _childWindows = new Dictionary<Type, Form>(); 

private Form ShowForm<T>() where T : Form 
{ 
    var formType = typeof(T); 
    // If we already display a form of given type -> activate it 
    if (_childWindows.ContainsKey(formType)) 
    { 
     var form = _childWindows[formType]; 
     form.Activate(); 
     return form; 
    } 
    else 
    { 
     // Else create a new form instance 
     var form = (Form) Activator.CreateInstance(typeof(T)); 
     form.MdiParent = this; 
     form.FormClosing += myFormForm_FormClosing; 
     _childWindows[formType] = form; 
     form.Show(); 
     return form; 
    } 
} 

void myForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    _childWindows.Remove(sender.GetType()) 
} 

使用法:

private void firtsToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    var form = ShowForm<MyForm>(); 
} 
+0

大変ありがとう、完璧に動作します – Igor

0

渡されたフォームがまだインスタンス化されていない場合、新しいインスタンスを作成するメソッドを作成します。

private ShowForm<T>(T form) where T : Form 
{ 
    if(form == null) 
    { 
     form = Activator.CreateInstance(typeof(T)); 
     form.MdiParent = this; 
     form.FormClosing += myFormForm_FormClosing; 
     form.Show(); 
    } 
    else 
    { 
     form.Activate(); 
    }  
} 
関連する問題