2016-04-27 6 views
0

これは、コードの切り取りと貼り付けを避けるための「良いプログラミング」の質問です。プログラミングの指導者は、あなたがコードをカットアンドペーストしているなら、あなたはおそらくそれを間違っていると言いました。 私は半ダースのデータ入力画面を持つC#windowsフォームアプリケーションを持っています。フォームがデータ入力コントロールに変更されたときにユーザーがキャンセルボタンを押すと、変更の破棄を確認する機能を実装しています。このコードをすべてのフォームのbutton_Cancel_Clickメソッドに切り取って貼り付けることは望ましくありません。キャンセルボタンメソッドを別のクラスに移動する方法

「Are You Sure」の質問は別のクラスに移動しましたが、別のクラスのフォームを閉じてコンパイルすると、「this.Close()」の「this」が何であるかわからないを参照してください。

これはいいですが、それは取得すると私はちょうどコードを複製する必要がありますか?事前に おかげで デビッド

private void buttonCancel_Click(object sender, EventArgs e) 
    { 
     // Check and warn users of changes to the data before close. 
     if (dataChanged) 
     { 
      bool discardChanges = CancelForm.AreYouSure(); 
      if (discardChanges) 
      { 
       this.Close(); 
      } 
     } 
     else 
     { 
      this.Close(); 
     } 
    } 
+1

私は、基本クラスから継承フォームを実装する場合、 'Cancel'ボタンなど' buttonCancel_Clickのmethod'、 'DataChanged'プロパティでForm''から継承された*抽象的な*基本クラスを使用してお勧めします。 –

+0

私は論理を扱う関数を使うことをお勧めします: '(ValidateChangesMade(dataChanged)){ this.Close(); } '、またはロジックをCancelFormクラスに追加することです: 'if(CancelForm.ValidateChangesMade(dataChanged)){ this.Close(); } ' – MrApnea

+1

本当にあなた次第ですが、私が通常やっているのはできるだけMVCロジックに従っているから、変更したり、プログラムをWebアプリケーションに変換したりする必要がある場合は、インターフェイスを変更するだけです。このロジックに続いて、私はこのメソッドを別のクラスに置くのではなく、別々のフォームに保存することをお勧めします。これはプログラムのインターフェイスにのみ影響し、それを別のクラスに移動すると、 –

答えて

0

私はので、私は基本的にコピーされ、コスタスバリスは助言に従うことを決定し、キャンセルボタンとフォームのそれぞれにあるように私のコードを貼り付けました。私は何か新しいことを学ぶことを望んでいましたが、それはこれを学ぶのに最も良い場所/時間ではなかったようです。

From "Dimitryから"フォームから継承した抽象基底クラスを使用しています.... "私が完全に理解していない多くの用語に使用されています。私は、知る必要があることを知っています。

FSDanielのオプションは面白そうです。私はこれを渡すことを決して考えなかった。キャンセルフォームクラスの変数として閉じる。これはおそらく私が当初考えていたことに最も近いでしょう。

結局私はそれを数年後に理解しようとしているかもしれないと知っているので、それを可能な限り単純で理解しやすいものにすることに決めました。 :)

P.S.私が書いているプログラムは、私が15年前にAccess 97を使って書いたプログラムを置き換えるものです。まだ生産中です:)

ありがとうございました。

デビッド

関連する問題