确定哪个文本框触发了文本更改事件

本文关键字:文本 事件 | 更新日期: 2023-09-27 18:34:09

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

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

我的代码是:

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

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

确定哪个文本框触发了文本更改事件

sender 参数包含触发事件的控件。可以将其强制转换为文本框并从中获取 name 属性:

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

object sender(触发事件的文本框)转换为TextBox

如果只有一个属性是你想要的,那么写

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

但是,当需要多个属性时,最好创建一个 Textbox 变量并像它一样使用它。

TextBox txtbox =  (TextBox)sender;

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

string propertyName = txtbox.Name; 
MessageBox.Show(proptertyName);
MessageBox.Show(txtbox.Content.ToString());

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

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

对于更通用的实现,这也是一种很好的做法,因为将其强制转换为"TextBox"意味着只能将处理逻辑应用于该类型的控件。