3

GUI ではなくメイン ソース ファイルで宣言されているコントロールを含むイベント処理関数を記述する場合、プログラマはスコープの制限を回避するにはどうすればよいでしょうか?

この問題を解決するために、Form1_Load() の代わりにそのようなコントロールをグローバル スコープで宣言することは「許容」されますか?

private void Form1_Load(object sender, EventArgs e)
{
    ComboBox t = new ComboBox();
    Button b = new Button();
    b.OnClick += b_OnClick;
}

private void b_OnClick(object sender, OnClickEventArgs e)
{
    s.Add("Hello s!"); // The object s is a ComboBox control generated in the Designer GUI
    t.Add("Hello t!");
}

// Line 10 is valid.
// Line 11 is invaid because t does not exist in the current scope.  How might one work around this issue?
4

1 に答える 1

3

form.designer ファイルを見ると、デザイナーを使用して作成されたすべてのコントロールがグローバルであることがわかります。したがって、独自のコードでも同じことができると思います。

ただし、これらのコントロールを必要としない状況もあると思います。それ以外の場合は、デザイナーで直接ビルドし、そのコードを回避するようにロジックが指示されます。

もちろん、上記のコードには、ポジション、サイズ、名前、最も重要なものなど、絶対に必要な情報が不足しています。声明ですが、これForm.Controls.Add(control)があなたの質問の単純化によるものかどうかはわかりません。

于 2013-06-22T17:16:47.190 に答える