【问题标题】:Identify which textbox has fired a text changed event确定哪个文本框触发了文本更改事件
【发布时间】:2015-02-24 17:59:07
【问题描述】:

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

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

我的代码是:

txtStringProperty.TextChanged += TextBoxValueChanged;

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

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

【问题讨论】:

  • 您可能不应该“通过代码”创建控件,而是使用data templates

标签: c# wpf event-handling


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我认为可能是这种情况,但想检查一下这是公认的做法。
【解决方案2】:

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());

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多