我想如果用户在文本框中键入字符“a”,则显示消息“Ok”的消息框,然后文本框应该清除。但是我遇到的问题是当我输入“a”消息时“Ok”是显示以及消息“否”也会显示。但是当我删除清除的状态时,一切都很顺利。请告诉我如何克服这个问题?
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text == "a")
{
textBox1.Text = "";
MessageBox.Show("Ok");
}
else
{
MessageBox.Show("No");
}
}
答案 0 :(得分:3)
这是因为Text=""
再次触发了TextChanged
。使用这样的标志:
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”只是一个示例)。如果你想检查一个角色。请改用KeyPress
事件。
答案 1 :(得分:2)
您正在使用文本框的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");
}
}
答案 2 :(得分:1)
这是因为当您设置textBox1.Text = "";
时,事件textBox1_TextChanged
会再次出现,并且文本框中没有字母'a',因此也会显示带有“否”的信息框。
答案 3 :(得分:1)
您需要检查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");
}
}
答案 4 :(得分:1)
那是因为textBox1.Text = ""
再次调用textBox1_TextChanged
。
答案 5 :(得分:1)
您应该处理KeyUp
事件
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");
}
}