2013-11-09 3 views
0

Я хочу, чтобы пользователь вводил символ «a» в текстовое поле, появляется окно с сообщением «Ok», а затем текстовое поле должно очищаться. Но я столкнулся с проблемой, когда при вводе " появляется сообщение «Ok» и вместе с сообщением «Нет» также отображается. Но когда я удаляю отчет о четности, все идет хорошо. Скажите, пожалуйста, как решить эту проблему?Управление, если условие в функции изменения текста

private void textBox1_TextChanged(object sender, EventArgs e)  
{ 
    if (textBox1.Text == "a") 
    { 
     textBox1.Text = ""; 
     MessageBox.Show("Ok"); 
    } 
    else 
    { 
     MessageBox.Show("No"); 
    } 
} 

ответ

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"); 
    } 
} 
+0

+1 очень хороший момент. –

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"); 
    } 
} 

ПРИМЕЧАНИЕ: Код выше предполагает, вы хотите проверить на строку («а» просто пример). Если вы хотите проверить персонажа. Вместо этого используйте событие KeyPress.

1

Это потому, что, когда вы установили textBox1.Text = "";, событие textBox1_TextChanged поднято еще один, и в текстовом поле нет буквы «a», и поэтому также отображается поле для сообщения с «Нет».

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"); 
    } 
} 
1

Это потому, что textBox1.Text = "" снова вызывает textBox1_TextChanged.

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"); 
      } 
     } 
Смежные вопросы