3

Visual C#デザイナーは初めてなので、これらはデザイナーとの連携方法に関する一般的でかなり基本的な質問です。

たとえば、フォームにラベルを追加し、Visual C#デザイナーでダブルクリックすると(Microsoft Visual C#2008 Express Editionを使用しています)、次のことが起こります。

  1. デザイナは、 Form1.Designer.cs内にコードを生成し(簡単にするためにデフォルト名を想定)、ラベルを追加します。
  2. 次に、ダブルクリックすると、次のコードを使用して、Form1.Designer.cs内のラベルにイベントハンドラーlabel1_Clickが追加されます。

    this.label1.Click + = new System.EventHandler(this.label1_Click);

そしてそれはForm1.csにイベントハンドラーメソッドを追加します

private void label1_Click(object sender, EventArgs e)
{

}

ここでラベルを削除すると、Form1.Designer.cs内のコードのみが削除されますが、label1_Clickメソッドは、他に使用されていない場合でもForm1.cs内に残ります。ただし、デザイナ内から[プロパティ]-> [クリックイベントのイベント]内でリセットを使用している場合、Form1.csのlabel1_Clickメソッドも削除されます。

1.)それは少し一貫性のない振る舞いではありませんか?

2.)そのような生成されたイベントハンドラーコードを削除するための推奨される方法は何ですか?

3.)デザイナーを使用するための最良の「メンタルアプローチ」/ベストプラクティスは何ですか?

Form1.csが100%私の責任であり、その一方で、Form1.Designer.csのコードにはまったく触れていないという方法で、精神的な分離によってアプローチします。それは理にかなっていますか?時々デザイナーがsthを削除するので。Form1.csからこれについてはよくわかりません。

4

2 に答える 2

2

1)はい、一貫性がありません。少し。2)私ははるかに単純なアプローチを使用しました:単純にすべてのハンドルコードを消去してコンパイルしてみてください=>コンパイラはイベント割り当てを消去する場所を示します。見た目は怖いですが、本当に安全です。3)ソフトウェア部門で推奨および実施するベストプラクティスは次のとおりです。3a)WPFに切り替えます(WPFのベストプラクティスを個別に求めます。他にも多くの問題があります)。3b)Visual Studioがイベントコード(WPFまたはWindows.Forms)を自動生成することを決して許可しないでください。事故の場合(2)できるだけ早く; 3b)イベントの割り当てには、匿名ラムダを使用します。

ByButton.Click += (source, evArg) => { SomeHandler(...); };

v.2.0の場合:

ByButton.Click += delegate(object source, EventArgs evArgs) { SomeHandler(...); };

多くの利点があります。ハンドラーは特定のメソッドプロファイルを使用する必要がありません。コード全体を匿名ハンドラー内に入れることができます。それは十分に短いので、ラムダ形式では、イベント引数のタイプを知る必要がない場合があります。

于 2010-05-21T20:42:31.037 に答える
1

VisualStudioにはおそらく安全性の要素が組み込まれています。

例えば:

  • ボタンAとクリックイベントを追加します。
  • 別のボタンBからボタンAクリックイベントを参照します。
  • ボタンAを削除
    • コードが実行された場合、ボタンBは壊れます
    • コードが残っている場合、ボタンBは引き続き機能します。

私は通常、designer.csファイルで壊れたコード(イベントハンドラー)をコメントアウトします。

于 2010-03-31T21:00:30.270 に答える