【问题标题】:Textbox value changed文本框值已更改
【发布时间】:2010-04-06 19:19:19
【问题描述】:

是否有可能知道应用程序中是否有任何文本框值发生了变化。 我有大约 30 个文本框,只有当任何文本框的值都超出 30 个时,我才想运行部分代码。有没有办法知道。

【问题讨论】:

    标签: c# wpf-controls


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果使用 MVVM + Binding,则在 WPF 中没有简单的方法可以做到这一点,因为 Binding 类(非常适合检测正在进行的编辑)不会...
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      在构造函数中,我创建了

      bool bChanged = false;

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

      bChanged = true;

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

      【讨论】:

        【解决方案4】:

        你也可以这样做:

        在您的构造函数中:

        MyTextBox.TextChanged += new TextChangedEventHandler( TextChanged );
        

        然后这个方法:

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

        【讨论】:

          【解决方案5】:

          试试这个。将此代码添加到加载/构造函数。无需在 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 }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-07
            • 2013-06-22
            • 1970-01-01
            • 1970-01-01
            • 2013-02-02
            相关资源
            最近更新 更多