2013-05-27 68 views
0

有沒有辦法使控件始終處於啓用狀態,所以如果你設置了Enabled = False它沒有效果? 我打算給處理器以這種方式添加到EnabledChange事件:防止控制在vb.net中禁用

AddHandler mybutton.EnabledChange, Sub() 
             mybutton.EnabledChange = True 
            End Sub 

,但它引起了很多的情況下,一個計算器例外,例如當你嘗試禁用包含有按鈕控制。那麼還有另一種方法來做到這一點?

+2

爲什麼你想創造這樣一個陷阱?大部分時間「魔法」代碼都不好,你會忘記它存在。 –

+1

請勿添加代碼。刪除代碼。特別是將Enabled屬性設置爲False的代碼:)如果它不是你的代碼,那麼有一位程序員可以幫助你,你不太可能在這裏找到他。 –

+1

問題是我的項目充滿了代碼,我在同一個循環中禁用了很多控件,所以我必須爲每個循環添加一個條件以跳過禁用該控件。因爲它是一種特殊的控制方式,所以我正在尋找一種方法來防止其他代碼將其禁用。 – mck89

回答

0

沒有

如果將其更改爲enabled =假沒有在良好的編碼實踐

  • 的所有領域,它改變了性質與該事件設置。

什麼是代碼問題,會有解決方案嗎?

在控件的屬性中,enabled = true。你不需要爲它編寫代碼。它在表單設計中。

在回答您的評論:

您可以使用matzone選擇了補丁..個人而言,我贊成去除循環特定控制的,我已經嵌套和無盡的有問題在vb.net中循環...我只是希望在我的程序中減少不必要的更改,只是有助於排除錯誤。這意味着你必須通過並確保重新啓用控件的代碼總是被調用,只要它在循環中被更改......如果你問我要問的錯誤。在短期內可能會有更多的工作,但首先選擇控制會更好。我面臨類似的困境。

見鏈接到MSDN

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.enabled.aspx

1

嘗試改變這樣的..這對我來說

Private Sub myButton_EnabledChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles myButton.EnabledChanged 
     If Not myButton.Enabled Then myButton.Enabled = True 
    End Sub 
+0

不幸的是,當您嘗試禁用該控件的容器時,會導致相同的堆棧溢出異常。我不知道它爲什麼會發生,也許它會繼續設置Enabled = False,直到它被其中的每個控件所尊重。 – mck89

0

這爲我工作

Protected Overridable Sub cmdCancel_EnabledChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdCancel.EnabledChanged 

    If DirectCast(eventSender, TPDotnet.GUIControls.WinButtonEx).Enabled = False Then 
     cmdCancel.Enabled = True 
    End If 

End Sub 

條件是正確處理工作。