2013-04-09 76 views
1

我正在構建一個非常不同的格式,每次創建或更新人的帳戶信息時將發送一條消息。我使用多個選項卡以多個文本框的形式生成消息。觸發事件處理程序,當任何文本框的文本已更改

計劃是每次打開一個帳戶時將帳戶中的所有當前信息加載到新消息中,然後更改任何已更改的文本框的值。

對於每個文本框單獨執行此操作將很容易但非常耗時。

會這樣嗎?

person_last_name.TextChanged += new EventHandler(AllTextBoxes_TextChanged); 
person_first_name.TextChanged += new EventHandler(AllTextBoxes_TextChanged); 

private void AllTextBoxes_TextChanged(object sender, EventArgs e) 

如果是這樣,那麼如何使用sender對象參數來檢測哪個TextBox觸發了該消息?

回答

1

是的,這應該工作

你可以使用switch語句,如果你想爲所有文本框做點不同的事

private void AllTextBoxes_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    string triggered = (e as TextBox).Name; 
    switch (triggered) 
    { 
    case "name1": 
     //somecode 
    case "name2": 
     //somecode 
    //etc 
    } 
} 
+0

如果表單對象具有任何其他事件句柄爲同一行動(TextChanged),他們也會觸發? – Glimpse 2013-04-09 18:01:51

+0

是的,他們應該......你可以通過加倍+ = eventhandler並在那裏添加一個msgbox來嘗試它。通常你會得到它彈出兩次 – 2013-04-09 18:03:33

2

如果您Xmal代碼是這樣的:

<TextBox Name="person_last_name" TextChanged="AllTextBoxes_TextChanged"></TextBox> 
<TextBox Name="person_first_name" TextChanged="AllTextBoxes_TextChanged"></TextBox> 

您可以檢測觸發的文本框是這樣的:

private void AllTextBoxes_TextChanged(object sender, TextChangedEventArgs e) 
     { 
      string triggered = (e as TextBox).Name; 
      if (triggered == "yourtarget") 
      { 
       //Do some thing with selected 
       //(e as TextBox). 
      } 
     } 
+0

但你也可以做...... 'person_last_name.TextChanged + =新的EventHandler(AllTextBoxes_TextChanged);' ...而不是編輯XAML吧? – Glimpse 2013-04-09 17:59:56

+0

只是添加一個開關,並檢查文本框的名稱;)是 – KF2 2013-04-09 18:03:16

+0

@Glimpse:是的,你可以這樣做 – KF2 2013-04-09 18:05:41