• 締切済み

【.NET】動的に作成したコントロールの操作

動的に作成したコントロールのイベントハンドラから、 同じく動的に作成したコントロールを操作するにはどうすれば良いのでしょうか? どちらのコントロールもKani.csからForm1.csに追加するものです。 例) ・Form1.cs ~省略~ namespace Chef {  ~省略~  KANI kani = new KANI();  kani.form1 = this;  kani.KanaFire();  ~省略~ ・Kani.cs ~省略~ namespace Chef {  public class KANI{   public Form1 form1;   public void KaniFire(){    //ラベル作成    Label LabelTARABA = new Label();    LabelTARABA.Text = "かにふらい";    form1.Controls.Add(LabelTARABA);    //ボタン作成    Button ButtonZUWAI = new Button();    form1.Controls.Add(ButtonZUWAI);    ButtonZUWAI.Click += new System.EventHandler(ButtonZUWAI_Clicked);   }   public void ButtonZUWAI_Clicked(object sender, System.EventArgs e){    /*ここでLabelTARABAを操作したい*/   }

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

ループで回す必要はなかった…  int TargetIdx = this.Controls.IndexOf((Control)sender) - 1;  if(form1.Controls[TargetIdx].GetType() == typeof(Label))  {   Label LabelTARABA = (Label)form1.Controls[TargetIdx];   LabelTARABA.Text = "美味しい";  } くらいか。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

KaniFire()が複数回コールされていた場合はどれが対象になるんでしょう??? http://dobon.net/vb/dotnet/control/findcontrolbyname.html せめてNameプロパティでも設定してあれば……。 # まぁそれでも複数回コールされていたらダメなんですが……。 う~ん…… ButtonZUWAI_Clicked()内で form1.Controlsコレクションからsenderに相当するインデックスを検索。 その1つ前のインデックスのものが対象…でしょうかねぇ……。 public void ButtonZUWAI_Clicked(object sender, System.EventArgs e){  int TargetIdx;  for(TargetIdx = 0;TargetIdx < form1.Controls.Count;TargetIdx++)  {   if(form1.Controls[TargetIdx] == (Control)sender)   {    TargetIdx--;    break;   }  }  if(TargetIdx != form1.Controls.Count)  {   if(form1.Controls[TargetIdx].GetType() == typeof(Label))   {    Label LabelTARABA = (Label)form1.Controls[TargetIdx];    LabelTARABA.Text = "美味しい";   }  } } みたいな感じですかねぇ……。

関連するQ&A