识别哪个文本框触发了文本更改事件。

4

我有许多由代码动态创建的文本框。

我想要为所有文本框分配一个通用的事件处理程序,用于文本更改事件,然后在处理程序中确定哪个文本框触发了该事件。

我目前拥有的代码是:

txtStringProperty.TextChanged += TextBoxValueChanged;

private void TextBoxValueChanged(object sender, RoutedEventArgs e)
{
    string propertyName = // I would like the name attribute of the textbox here
}

如果您需要更多信息,请告知。


你可能不应该通过代码创建控件,而是使用数据模板。 - H.B.
3个回答

7
sender 参数包含触发事件的控件。您可以将其转换为 TextBox,并从中获取 name 属性:
string propertyName = ((TextBox)sender).Name;

谢谢。我认为可能是这种情况,但想确认一下这是否是公认的做法。 - user589195

2

将触发事件的文本框 object sender 强制转换为 TextBox

如果只需要属性中的一个,则编写:

string propertyName = ((TextBox)sender).Name; 

今日免费次数已满, 请开通会员/明日再来
TextBox txtbox =  (TextBox)sender;

然后你可以使用它的任何属性,比如:

string propertyName = txtbox.Name; 

MessageBox.Show(proptertyName);
MessageBox.Show(txtbox.Content.ToString());

0

我的建议是查看MSDN上的基类层次结构, 然后将控件强制转换为该基类,并提取在其上定义的属性:

var name = ((ContentControl) sender).Name;

这也是一种更通用实现的好方法,因为将其转换为“TextBox”意味着您只能将处理逻辑应用于该类型的控件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接