0

親フォームから任意のオブジェクト (ラベル、テキスト ボックス、パネル) を呼び出す方法を知っている人はいますか? たとえば、フォーム A があり、このフォームにはラベル L、テキストボックス T、およびボタン B があります。関数 (public DoSomething(Form f)) を介してフォーム全体を渡し、ラベル L のプロパティを変更する方法はありますか?関数 DoSomething の Textbox T と Button B?

class DoSomething{
 private Form parentForm;
 public DoSomething(Form f) {
   parentForm = f;
   // HERE I WOULD LIKE TO CHANGE PROPERTIES OF LABEL L, BUTTON B
 }
}
4

3 に答える 3

0

すべてのフォーム コントロールを繰り返し処理し、各コントロールのプロパティを変更できます。

foreach (Control c in parentForm.Controls)
{
   if (c is Label && c.Name == "L")
   {
       // Do label stuff here
   }
   else if (c is TextBox && c.Name == "T")
   {
       // Do text box stuff here
   }
   if (c is Button && c.Name == "B")
   {
       // Do button stuff here
   }
}

名前でコントロールを見つけたい場合は、これを試すことができます:

Label L = (Label)parentForm.Controls.Find("L");
TextBox T = (TextBox)parentForm.Controls.Find("T");
Button B = (Button)parentForm.Controls.Find("B");

// Do stuff with L, T and B here...
于 2012-05-04T19:45:50.417 に答える
0

親フォーム プロパティのコントロールを に設定してみてくださいModifier to Public

子フォームでは、次のように使用します

parentForm.btnA.Name="ButtonB";

それがうまくいくことを願っています!

于 2014-10-22T04:14:39.287 に答える
0

あなたが直面している問題は、クラス Form が関心のあるプロパティを連結していないことです。

Indise DoSomething コントロールにアクセスするには、フォームを元のタイプに変換する必要があります。

 if (f is Form1)
 {
    Form1 f1 = f as Form1;
    f1.C... // here all the properties of the class form1 Are available.
 }

すべてのフォームに共通のプロパティがある場合は、インターフェイスを作成して、すべてのフォームに実装できます。そして、パラメータDoSomethingの型をインターフェースの型に設定します:

void DoSomething(IFomrInterface fi)
{
  fi.C... // this will have all the propertie savailabel in the interface
}

2 番目のソリューションは、より一般的です。すべてのフォームはインターフェースを実装する必要があります:

class Form1: Form, IFormInterface
于 2012-05-04T19:56:47.047 に答える