如何识别文本框中的文本是否通过编程或用户更改

问题描述

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

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

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

是否可以知道 TextBox 的值是由用户更改还是通过代码更改?

解决方法

您可以设置一个名为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;
        }