2013-04-09 61 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