2016-12-22 6 views
4

これは私の最初のwindowsフォームアプリケーションです。私はコードを再構成する際にいくつかの困難に直面しています。既定で提供されているForm1クラスのすべてを入れ始めましたが、すぐに大きくなりすぎました。私はこれが非常に悪いプログラミング練習であることを知っていますので、私はいくつかのクリーンアップを開始し、単一の責任の原則を満たすために異なるクラスを作った。しかし、ボタン関連のイベントやグリッド関連のイベントはForm1クラスでうまくいきますので、外に出すとクラッシュしてしまい、どうしたらいいかわかりません。windows forms organize code

public partial class Form1 
{ 


    public Form1() 
    { 
     InitializeComponent(); 

    } 

    private void method1(object sender, EventArgs e) 
    { 
      //CODE 
    } 



    private void method2(object sender, DataGridViewCellEventArgs e) 
    { 
      //CODE 
    } 



    private void method3(object sender, EventArgs e) 
    { 
      //CODE 
    } 

} 

ので、私はmethod1method2method3など異なるクラス(または異なるクラス)に移動したいのですが、かなり多くのアプリを壊すことなく、これを行う方法を失いました。私は明らかにアクセスを許可するためにprivateに設定されていますが、その後Form1クラスでこれらのメソッドを呼び出す方法はわかりません。新しいクラスを作成してイベントのメソッドを呼び出そうとしたとき、onClick: Newclass.method1()のように動作しませんでした。私が考えることのできるものは、Form1 onClick: thisMethodCallsTheOneINeedInADifferentClass()でいくつかのメソッドを呼び出すようなものですが、これは不器用な解決策であるようです...これを整理するより良い方法があると確信しています。アドバイスありがとうございます。

+1

フォーム内にイベントハンドラを残しておくことをお勧めします。 – stuartd

+0

"うまくいかなかった"ということをより明確に定義した場合は、必要な答えを得ることができます。コンパイラエラー?クラッシュ?例外? –

答えて

3

イベントハンドラはフォームに保存してください。ただし、コードを別のクラスに移動することはできます。クラスに電話したい場合は、直接呼び出すことはできません。

YourClass class1 = new YourClass(); 

また、静的であると宣言して1回呼び出す必要があります。

private static YourClass class1 = new YourClass(); 

次に、あなたは、このようにあなたの方法を使用することができます。

class1.YourMethod(); 
+0

またはメソッドを静的にします。 –

+0

ええ、それはより良い解決策になります。私は私の答え – nicoh

+0

のおかげで推奨を編集します、これは、それが取ったパスであり、期待どおりに動作します。私はクラスを静的にしませんでしたが、むしろそれをインスタンス化しました。乾杯 – mihocu

0

者は、ボタンイベントのイベントハンドラです。別の方法で指定したメソッドを使用する場合は、イベントハンドラを手作業で のコードの背後に配線する必要があります。あなたが何かわかります

今電線アップのためのコードは、デザイナーのファイルにあります。

button1.Click += new System.EventHandler(method1); 

を私はそれがイベントハンドラは、背後にあるだけのコードでも持ってしても大丈夫かなと思います他の場所で書いた別のクラスから何らかのルールメソッドを呼び出します。そのコードの中にいくつかのコードを生かすことには恥ずかしいことはありません。

設計者は正しいイベントハンドラを指し示す必要があり、Form1.csクラスから移動する場合は、正しい場所を指す必要があります。

関連する問題