2016-06-09 2 views
1

Мне нужно что-то сделать после того, как изменился TextBox.Есть ли какие-либо события VB.Net, которые делают то же самое с VBA «AfterUpdate»?

Если я использую событие TextChanged, код запускается на каждом добавленном или удаленном символе.

погуглить я нашел предложить here используя String переменную для хранения значения TextBox и используя Enter и Leave события.

Это единственный (или лучший) способ сделать это?

ответ

0

Я верю, что вы хотите обновить некоторые другие вещи после изменения текста, было завершено. обновление некоторых вещей на каждом нажатие клавиши/изменение текста может быть дорогостоящим.

Для этого вы можете использовать таймер, чтобы обнаружить, что пользователь продолжает нажатия клавиш или приостановлен.

пример

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As  System.EventArgs) Handles TextBox1.TextChanged 
      TimerUserTypingDone.Stop() 
      TimerUserTypingDone.Interval = 400 ' duration to wait till concluding that typing by user is finished, and get results 
     TimerUserTypingDone.Start() 
End Sub 

Private Sub TimerUserTypingDone_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerUserTypingDone.Tick 
     TimerUserTypingDone.Stop() 

    UpdateWhatsoEverRequired() 
End Sub 
+0

Спасибо, но я искал что-то более светлое. – genespos

+0

Можете ли вы уточнить требования. – pankaj

+0

Использование Enter и Leave довольно просто. Я спрашивал, есть ли лучшее решение – genespos

0

Вы на самом деле есть два варианта:

1 Использование Enter-Leave шаблона.

Таким образом, вы сохраняете текстовое значение при вводе в TextBox и сравниваете новое значение, когда вы его оставляете.

Private _originalText As String 'To remember the text 

Private Sub MyTextBox_Enter(Sender As Object, e As EvventArgs) Handles MyTextBox.Enter 
    'When we enter the TextBox, we save the text value 
    _originalText = MyTextBox.Text 
End Sub 

Private Sub MyTextBox_Leave(Sender As Object, e As EventArgs) Handles MyTextBox.Leave 
    If MyTextBox.Text <> _originalText Then 
    'The text has changed 
    Else 
    'The text has not changed 
    End If 
End Sub 

2 Используйте таймер, который будет определять, когда пользователь будет набирать текст.

Как указано here, идея состоит в том, чтобы предоставить пользователю полсекунды между двумя нажатиями клавиш. Если мы находимся в этом таймере, мы снова подождем, чтобы сообщить, что текст изменился.

+0

Да, но это решение, которое я уже нашел – genespos

+0

Да, я просто немного его адаптировал, чтобы он выглядел проще ... –

+0

Другое решение [this] (http: // stackoverflow .com/a/671735/5897829) и возобновляет то, что сделал @pankaj. –

Смежные вопросы