2013-05-27 24 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 

条件是正确处理工作。