2011-01-12 8 views
0

私は起動時にコントロールを動的に作成するプログラムを用意していますが、これを行うコードが実際のフォームのクラスにあるときにうまく動作します。別のクラスにコードを移動しようとしたところ、Controls.Add()を使用できないことがわかりました。フォームに別のクラスのコントロールを追加するにはどうすればよいですか?これは私がこれまで持っているものです。C#の別のクラスのコントロールを使用する

  TextBox txtbx = new TextBox(); 
      txtbx.Text = "asd" + x.ToString(); 
      txtbx.Name = "txtbx" + x.ToString(); 
      txtbx.Location = new Point(10, (20 * x)); 
      txtbx.Height = 20; 
      txtbx.Width = 50; 
      Controls.Add(txtbx); 

エラー1 'は、コントロールの名前をあなたは、少なくともフォームへの参照を必要とする現在のコンテキスト

答えて

3

Controlsが実際Controlクラスによって公開されたプロパティであり、フォームクラスの特定のインスタンスに追加されたすべてのコントロールの集合を表します。

他のクラスのコントロールを追加しようとしているFormオブジェクトへの参照がないため、他のクラスからは使用できません。これは、「現在のコンテキストには存在しない」という意味です。

あなたはあなたがコントロールを追加しますクラスのメソッドへのパラメータとしてコントロールを追加するにフォームのインスタンスを渡す必要があり:

public void AddControls(Form frm) 
{ 
    TextBox txtbx = new TextBox(); 
    txtbx.Text = "asd" + x.ToString(); 
    txtbx.Name = "txtbx" + x.ToString(); 
    txtbx.Location = new Point(10, (20 * x)); 
    txtbx.Height = 20; 
    txtbx.Width = 50; 
    frm.Controls.Add(txtbx); 
} 

をしかし、あなたはおそらく、デザインを再考すべきですあなたがこのような立場に追い込まれた場合、あなたのアプリケーションの別のクラスのフォームにコントロールを追加するべきではありません。これはUIと補助クラス間の結合の量を増やすためです。可能な限り最小限に抑えるように努力する必要があります。一般的に、何かがあることがわかっている時間の大部分は特に困難です。間違ったやり方をしようとしているかもしれない赤旗を送るべきです。

1

には存在しません。あなたが行うことができ、メインフォームにコントロールを追加するには次に

public class Program { 

    public static Form MainForm; 

    public static void Main() { 
     ... 
     MainForm = new Form1(); 
     Application.Run(MainForm); 

    } 

} 

:あなたのProgram.csのクラスでは、次のようなメインフォームへの参照を格納することができます。もちろん、

Program.MainForm.Controls.Add(txtbx); 

全体を紹介していますあなたのクラスをこのように緊密に結合することの他の問題ですが、あなたはWindows Formsや.NETの初心者のように聞こえる質問から、今はその問題を解決する意味がありません。 (それはControlから継承するので、したがってFormクラス)

関連する問題