Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定文本框中的文本是通过编程还是通过用户更改的_C#_Wpf_Uwp_Textbox_Textchanged - Fatal编程技术网

C# 如何确定文本框中的文本是通过编程还是通过用户更改的

C# 如何确定文本框中的文本是通过编程还是通过用户更改的,c#,wpf,uwp,textbox,textchanged,C#,Wpf,Uwp,Textbox,Textchanged,我们使用一个文本框来显示从I/O系统接收到的输入。如果用户在文本框中输入一些数据,该值将写入IO系统 我们使用ContextChanged事件将用户输入的数据写入IO系统 问题是,当我们将从IO系统接收到的值更新到文本框(从代码)时,会发生此事件 是否可以知道文本框的值是由用户更改的还是通过使用代码更改的?您可以设置一个名为IsUserInput的布尔变量,在I/O系统向文本框发送数据后,您需要将IsUserInput设置为false。 在文本框的KeyDown事件中,可以将变量设置为true。

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

我们使用ContextChanged事件将用户输入的数据写入IO系统

问题是,当我们将从IO系统接收到的值更新到文本框(从代码)时,会发生此事件


是否可以知道文本框的值是由用户更改的还是通过使用代码更改的?

您可以设置一个名为IsUserInput的布尔变量,在I/O系统向文本框发送数据后,您需要将IsUserInput设置为false。 在文本框的
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;
        }

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