【问题标题】:How to identify whether the text changed in textbox either by programmatically or by user如何识别文本框中的文本是否以编程方式或用户更改
【发布时间】:2021-08-10 17:09:42
【问题描述】:

我们使用 TextBox 来显示从 I/O 系统接收到的输入。如果用户在文本框中输入了一些数据,该值将被写入IO系统。

我们正在使用 OnTextChanged 事件将用户输入的数据写入 IO 系统。

问题是当我们更新从 IO 系统接收到的值到文本框(来自代码)时,我们得到了这个事件。

是否可以知道TextBox的值是用户修改的还是代码修改的?

【问题讨论】:

  • 使用绑定和 MVVM。不要把逻辑放在眼里。
  • 不,我需要在文本更改事件中找到这种差异以供内部使用
  • 将文本与您的模型进行比较。如果不同,则是用户输入
  • 或者像KeyDown这样的事件
  • 不可能在TextChanged 事件处理程序中找到它。在以编程方式设置 Text 属性之前,您想做什么?

标签: c# wpf uwp textbox textchanged


【解决方案1】:

您可以设置一个名为IsUserInput 的布尔变量,当I/O 系统向文本框发送数据后,您需要将IsUserInput 设置为false。 在TextBox 的KeyDown 事件中,可以将该变量设置为true。最后,您可以使用此变量来确定textChanged 事件中的文本输入器。

请参考以下代码。

public Boolean IsUserInput;

private void Button_Click(object sender, RoutedEventArgs e)
        {
            IsUserInput = false;
            myTextBox.Text = "hellohello";
          
        }

        private void myTextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (IsUserInput)
            {
//write data to I/O sytem
            }
           
        }

private void myTextBox_KeyDown(object sender, KeyRoutedEventArgs e)
        {
            IsUserInput = true;
        }

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 2023-02-13
    • 1970-01-01
    • 2013-01-16
    • 2015-04-24
    • 2018-10-18
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多