2012-07-24 83 views
1

我使用的表單需要複製粘貼的URL。我想要一個textChanged事件,它會在粘貼時立即檢查URL,告訴用戶它是否有效。我還希望能夠在發生這種情況時鎖定文本框,並且顯示一條消息,如「正在處理...」。使用TextChanged禁用文本框事件

問題出在下面的代碼中,文本框永遠不會被禁用,程序將執行checkUrl()方法,並且文本框永遠不會被禁用,即使它是第一次執行(我認爲它是但事實存在在它下面的函數調用正在搞亂某些東西或獲得更高的優先級)。

我該如何在方法運行時將控件視覺禁用?

private void urlTxtBx_TextChanged(object sender, EventArgs e) 
{ 
    urlTxtBx.Enabled = false; 

    checkUrl(); 

    urlTxtBx.Enabled = true; 
} 
+1

您在checkUrl();之後立即重新啓用它。該方法需要多長時間?如果它只是驗證一個URL,那麼我懷疑它是非常長的,所以禁用文本框沒什麼意義? – dtsg 2012-07-24 08:45:37

+1

你確定它沒有被禁用?如果'checkUrl()'執行得太快,所以你看不到它呢?調試一下。 – Schaliasos 2012-07-24 08:45:47

+0

在禁用文本框之後放置一個消息框,這樣您可以暫停代碼並查看它是否有效,如果確實如此,它可能只是執行'checkUrl()'足夠快以在您注意到之前重新啓用文本框。 – 2012-07-24 08:48:06

回答

1

我認爲這是因爲應用程序需要在禁用TextBox之前完成所有活動線程。請嘗試以下代碼:

private void urlTxtBx_TextChanged(object sender, EventArgs e) 
{ 
    urlTxtBx.Enabled = false; 
    Application.DoEvents(); 
    checkUrl(); 
    urlTxtBx.Enabled = true; 
} 

這將讓UI得到更新。欲瞭解更多詳情,請查詢here

+1

幾乎就會觸發。您必須在禁用文本框後調用DoEvents(),因爲UI需要更新(通過處理繪製消息來更新DoEvents())。 – CodeCaster 2012-07-24 09:22:15

+0

這是正確的,但是你有Application.DoEvents();行在錯誤的地方。它需要在禁用文本框後調用。 – dtsg 2012-07-24 09:22:53

+0

好的,我會解決它。謝謝。 – Schaliasos 2012-07-24 09:23:22

相關問題