0

こんにちはtextboxes、フォームのすべてで値が変更されたかどうかをどのように監視できるか疑問に思っていました。ここでいくつかのコードを見まし た

private void Form1_Load(object sender, EventArgs e)
{
    foreach (Control ctrl in this.Controls)
    {
        if (ctrl is TextBox)
        {
            TextBox tb = (TextBox)ctrl;
            tb.TextChanged += new EventHandler(tb_TextChanged);
        }
    }
}

void tb_TextChanged(object sender, EventArgs e)
{
    TextBox tb = (TextBox)sender;
    tb.Tag = "CHANGED"; // or whatever
}

そして、このコードを書いた人は、「パネルとグルーボックスのテキストボックスに割り当てることはできません」と言っています。

私の質問は、グループボックスまたはパネルにほとんどすべてのテキストボックスがあるため、パネルまたはグループボックスのテキストボックスに変更が加えられたかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

3

ネストされたコントロールを処理する必要がある場合、1 つの for ループは役に立ちません。stackすべてのコントロールをループするには、次のような再帰メソッドまたはカスタムを使用する必要があります。

private void RegisterTextChangedEventHandler(Control root){
   Stack<Control> stack = new Stack<Control>();
   stack.Push(root);  
   Control current = null;     
   while(stack.Count>0){
      current = stack.Pop();
      foreach(var c in current.Controls){
         if(c is TextBox) ((TextBox)c).TextChanged += textChanged;
         stack.Push(c);
      }
   }
}
private void textChanged(object sender, EventArgs e){
   //....
}
//Use it
RegisterTextChangedEventHandler(yourForm);//Or your container ....
于 2013-09-30T10:40:20.663 に答える