プロが教えるわが家の防犯対策術!

動的に作成したコントロールのイベントハンドラから、
同じく動的に作成したコントロールを操作するにはどうすれば良いのでしょうか?
どちらのコントロールも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を操作したい*/
  }

A 回答 (2件)

ループで回す必要はなかった…



 int TargetIdx = this.Controls.IndexOf((Control)sender) - 1;
 if(form1.Controls[TargetIdx].GetType() == typeof(Label))
 {
  Label LabelTARABA = (Label)form1.Controls[TargetIdx];
  LabelTARABA.Text = "美味しい";
 }

くらいか。
    • good
    • 0

KaniFire()が複数回コールされていた場合はどれが対象になるんでしょう???



http://dobon.net/vb/dotnet/control/findcontrolby …

せめて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 = "美味しい";
  }
 }
}

みたいな感じですかねぇ……。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!