2013-06-21 9 views
5

多くのラベルとテキストボックスを持つフォームがあります。いずれかのフィールドが変更されている場合は、タイトルを赤で強調表示したいと思います。これを行う簡単な方法はありますか、イベントコールバックを各フォームオブジェクトに個別に追加する必要がありますか?ありがとう!C#のすべてのフォームオブジェクトにイベントを追加する簡単な方法はありますか

答えて

0

各コントロールに関連付けられているイベントを確認すると、フォームにコード化されているすべてのイベントのリストを「ドロップダウン」することができます。たとえば、「Text Changed」イベントをダブルクリックすると、controlname_textchanged(...)になります。ただし、すべての汎用ハンドラがある場合は、textchangedevent(...)と呼びます。ジェネリックイベントハンドラは、送信者とイベントオブジェクトをそのイベントに関連付ける必要があります。

これをユーザーコントロールで行い、メインフォームを更新する必要がある場合は、これをpublic event eventobject youreventnameでバブリングし、そのイベントをメインフォームにバインドします。このような

0

何か作業をする必要があります:

foreach (System.Windows.Forms.Control cont in this.Controls) 
      cont.Validating += new System.Windows.Forms.ValidationEventHandler(this.Control_Validating_Method) 

次にイベントのコードでコントロールタイプをテストし、元の値との値を比較することができます。あなたは、イベントを追加するために、フォームのLoadイベントでこのような何かを行うことができ、私の頭の上から

1

...

foreach (var control in this.Controls) 
{ 
    if (control is Label) 
    { 
     ((Label)control).TextChanged += Controls_TextChanged; 
    } 
    else if (control is TextBox) 
    { 
     ((TextBox)control).TextChanged += Controls_TextChanged; 
    } 
} 
0

はいあなたは簡単に同じイベントにコントロールを追加することができます。この例では、 'Labels'と 'Textboxes'を同じイベントに配置しています。

private void Form1_Load(object sender, EventArgs e) 
    { 
foreach (Control x in this.Controls) 
      { 
       if(x is Label) 
        ((Label)x).MouseHover+=new EventHandler(AllLabels_HoverEvent); 
        else if(x is TextBox) 
        ((TextBox)x).MouseHover+=new EventHandler(AllTextboxes_HoverEvent); 
      } 
} 

void AllLabels_HoverEvent(object sender, EventArgs e) 
     { 
       Label label = (Label)sender; 
      // label.dowhateveryouwant... 
     } 
     void AllTextboxes_HoverEvent(object sender, EventArgs e) 
     { 
      Textbox textbox = (Textbox)sender; 
      // textbox.dowhateveryouwant... 
     } 

以下にコメントしてください他のコンテナにネストされたコントロールがある場合は、this.Controlsには含まれませんが、注意してください。

関連する問題