问题描述
我们使用 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;
}