所以基本上我已經連接好三個文本框,做一個聰明的過濾器,並希望讓用戶做多過濾器。唯一的問題是它發射太頻繁,我想在延遲後發射。 'TextChanged'的事件是有線的基本上運行,我有一個簡單的例子,我想要的:保證方法只觸發一次當事件被觸發的WinForms新方法,多次在.NET 4.5
我有一個簡單的WinForms UI有兩個文本框:「txtWait」和「txtTest」。在前端代碼的屬性是默認和文字是:
txtWait.Text = 1000
txtTest.Text = "Test Text I have here to look at"
來測試這一點的方法是剛打退格幾次和等待。我只想只顯示最後一段文字。我只是讓這部分工作,但重置它沒有像我期望的那樣發生。我希望一個人可以擊退退格,退格(僅半秒過去),退格(時鐘重置和新的等待開始)。
而且我後面的代碼是:
Public Class DelayBeforeAction
Private _loaded As Boolean = False
Private _sw As Stopwatch = New Stopwatch()
Public Sub New()
InitializeComponent()
_loaded = True
End Sub
Private Sub txtTest_TextChanged(sender As Object, e As EventArgs) Handles txtTest.TextChanged
If _loaded Then
_sw.Start()
DelayExecute(Sub() If _sw.ElapsedMilliseconds > CInt(txtWait.Text) Then _sw.Reset() : MessageBox.Show(txtTest.Text) Else _sw.Reset(), CInt(txtWait.Text))
End If
End Sub
Private Async Sub DelayExecute(action As Action, timeout As Integer)
Await Task.Delay(timeout)
action()
End Sub
End Class
我應該加我沒有添加一個C#標記,它的含義已被刪除,我也接受C#答案。我很擅長在C#或VB.Net中執行代碼。 – djangojazz
如果您使用了一個按鈕,用戶按下以指示「我已完成設置標準」,您不需要延遲。特別是,如果將有多個文本框 – Plutonix
@Plutonix是,這是一個好點,但我也想知道如何做到這一點的只有事件驅動的行爲問題的方式。 – djangojazz