我需要在fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
更改后执行某些操作。
如果我使用TextBox
事件,则代码会在插入或删除的每个字符上运行。
谷歌搜索我发现了一个建议here使用TextChanged
变量来存储String
的值并使用TextBox
和Enter
个事件。
这是唯一(或更好)的方式吗?
答案 0 :(得分: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
答案 1 :(得分: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,我们的想法是在两次击键之间给用户半秒钟。如果我们在这个计时器内,我们再次等待表明文本已经改变。