2016-08-27 13 views
0

私はC#のプロジェクトに約20のフォームを持っています。クラスでメソッドを作成しました。私は20のフォームすべてで、そのメソッドをLoadイベントで呼びたいと思っています。各フォームのLoadイベントにCallステートメントを1つずつ配置できます。しかし、将来、フォームが増加する可能性があります。また、ある種のフォームがそのLoadイベントを間違って書き込むことができなくなる可能性があります。複数のフォームがロードイベントで同じメソッドを呼び出す方法

特定のメソッドがプロジェクトのすべてのフォームのロードイベントを処理できるというのは論理ですか? System.Reflectionを使用して、プロジェクトのすべてのフォームのリストを取得できます。したがって、これらのフォームのすべてのロードイベントをクラスの同じ特定のメソッドにアタッチすることは可能ですか?

答えて

2

あなたのカスタムフォームを作成し、Onload(またはイベント)をオーバーライドすることができ

using System.Collections.Generic; 
using System.Text; 
using System.Windows.Forms; 

namespace test 
{ 
    public class MyForm : Form 
    { 
     protected override void OnLoad(EventArgs e) 
     {     
      MessageBox.Show("test"); //call your method(s) 
      base.OnLoad(e); 
     } 
    } 
} 

と新しいフォーム

namespace CustomFormProject 
{ 
    public partial class Form1 : MyForm 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      //MessageBox will be shown automatically from your base (MyForm) class 
      //other codes 
     } 
    } 
} 
0

あなたはこのような何かを行うことができます。

public partial class Form2 : MainForm 
public partial class Form3 : MainForm 
... 
... 
... 
public partial class Form19 : MainForm 
public partial class Form20 : MainForm 

はあなたの他のフォームMainFormを継承し、そのイベントでメソッドを呼び出します。

MainFormは、メソッドを作成したクラスであり、さらに他のフォームでそのメソッドにアクセスします。

以下の例は、MainFormのメソッドです。

public partial class MainForm : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    public void Msg() 
    { 
     MessageBox.Show("Hello"); 
    } 
} 

は最初MainFormクラスから継承してForm2_Loadイベントに方法Msg()を呼び出します。

public partial class Form2 : MainForm 
          ^^^^^^^^ 

さて、このメソッドを呼び出します。

同様
private void Form2_Load(object sender, EventArgs e) 
{ 
    Msg(); 
} 

、あなたは同じことを行いますあなたの残りの部分はフォームです。

+0

マルチレベルの継承のこのアイデアは素晴らしいです...しかし、もし各フォームのParentクラスを変更する必要があります。次に、各フォームのLoadイベントにメソッドのCallステートメントを配置することもできます。私は実際には、私は20のフォームで何も変更しないと私の方法は、すべての20のフォームの負荷イベントを処理することができるようになる方法があることを尋ねたいですか?私の質問が愚かに見える場合は、私の謝罪を受け入れてください... –

関連する問題