文本框值已更改

时间:2010-04-06 19:19:19

标签: c# wpf-controls

是否可以知道应用程序中是否有任何文本框值已更改。   我有大约30个文本框,我想只运行代码的一部分,如果任何文本框的值已经改变了30.有没有办法让我知道。

5 个答案:

答案 0 :(得分:9)

当内容发生变化时,每个文本框都会引发一个事件TextChanged。但是,这需要您订阅每个事件。

好消息是您可以使用相同的方法多次订阅该事件。处理程序有一个参数sender,您可以使用它来确定30个文本框中的哪一个实际上已经引发了事件。

您还可以使用GotFocusLostFocus事件来跟踪实际更改。您需要将原始值存储在GotFocus上,然后与LostFocus上的当前值进行比较。这解决了两个TextChanged事件相互抵消的问题。

答案 1 :(得分:2)

您可以为每个TextBox的TextChanged事件分配一个事件处理程序。所有这些都可以在代码中分配给同一个事件处理程序。然后你会知道文本何时发生变化。您可以在类中设置布尔标志字段以记录发生了更改。

答案 2 :(得分:1)

试试这个。将此代码添加到加载/构造函数。无需在XAML中明确指定事件

this.AddHandler(TextBox.TextChangedEvent, new TextChangedEventHandler(TextChanged));
private void TextChanged(object Sender, TextChangedEventArgs e)
{
    //ToDO (use sender to identify the actuale text from where it fired }
}

答案 3 :(得分:1)

这可能是在粗略和准备的一面,但我是这样做的。

在构造函数中,我创建了

bool bChanged = false;

在每个控件的TextChanged事件处理程序中(实际上每个控件都相同),我把

bChanged = true;

在适当的时候,我可以进行一些处理,并将bChanged设置为false。

答案 4 :(得分:1)

你也可以这样做:

在构造函数中:

MyTextBox.TextChanged += new TextChangedEventHandler( TextChanged );

然后这个方法:

private void TextChanged(object Sender, TextChangedEventArgs e){
            //Do something
        }