C# 控制文本更改函数中的if条件
我想如果用户在文本框中键入字符a,则会显示带有消息Ok的消息框,然后文本框应该清除。但我面临的问题是,当我键入消息Ok时,会显示,同时也会显示消息No。但是,当我删除清除状态时,一切都会正常。请告诉我如何克服这个问题C# 控制文本更改函数中的if条件,c#,.net,winforms,C#,.net,Winforms,我想如果用户在文本框中键入字符a,则会显示带有消息Ok的消息框,然后文本框应该清除。但我面临的问题是,当我键入消息Ok时,会显示,同时也会显示消息No。但是,当我删除清除状态时,一切都会正常。请告诉我如何克服这个问题 private void textBox1_TextChanged(object sender, EventArgs e) { if (textBox1.Text == "a") { textBox1.Text = "";
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text == "a")
{
textBox1.Text = "";
MessageBox.Show("Ok");
}
else
{
MessageBox.Show("No");
}
}
这是因为Text=再次触发了文本更改。使用如下标志:
bool suppressTextChanged;
private void textBox1_TextChanged(object sender, EventArgs e) {
if(suppressTextChanged) return;
if (textBox1.Text == "a") {
suppressTextChanged = true;
textBox1.Text = "";
suppressTextChanged = false;
MessageBox.Show("Ok");
} else {
MessageBox.Show("No");
}
}
注意:上面的代码假设您要对照字符串a进行检查,这只是一个示例。如果要检查某个字符。改为使用按键事件。这是因为当您设置textBox1.Text=;事件textBox1\u TextChanged再次引发,文本框中没有字母“a”,因此也会显示带有“否”的消息框。您需要检查textBox1.Text中的更改是来自用户还是来自您。显示“否”,因为您将文本更改为非文本。您可以保留一个布尔标志,指示是否要对更改作出反应:
bool changedByCode = false;
private void textBox1_TextChanged(object sender, EventArgs e)
{
if(changedByCode) return;
if (textBox1.Text == "a")
{
changedByCode = true;
textBox1.Text = "";
changedByCode = false;
MessageBox.Show("Ok");
}
else
{
MessageBox.Show("No");
}
}
这是因为textBox1.Text=调用textBox1\u Text再次更改。您使用的是textbox的TextChanged事件。手动更改文本时,TextChanged事件将再次运行,而这次将运行else表达式
private void textBox1_TextChanged(object sender, EventArgs e)
{
if(textBox1.Text != "")
if (textBox1.Text == "a")
{
textBox1.Text = "";
MessageBox.Show("Ok");
}
else
{
MessageBox.Show("No");
}
}
你们应该处理这个事件
public Form1()
{
InitializeComponent();
textBox1.KeyUp+=new KeyEventHandler(textBox1_KeyUp);
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (textBox1.Text == "a")
{
textBox1.Text = "";
MessageBox.Show("Ok");
}
else
{
MessageBox.Show("No");
}
}