【发布时间】:2013-09-17 18:47:17
【问题描述】:
我在表单内的面板内有一些控件。我想禁用面板,但面板内的一些控件需要保持启用状态。
有没有办法在禁用的面板中启用某些控件?
我会很高兴有一些想法如何做到这一点。
【问题讨论】:
标签: vb.net controls panel desktop-application
我在表单内的面板内有一些控件。我想禁用面板,但面板内的一些控件需要保持启用状态。
有没有办法在禁用的面板中启用某些控件?
我会很高兴有一些想法如何做到这一点。
【问题讨论】:
标签: vb.net controls panel desktop-application
面板的好处之一是可以使用很少或没有视觉元素来提供逻辑分组(与既是逻辑 AND 视觉元素的 Groupbox 相比)。鉴于您的问题,也许所有子控件实际上并不属于同一个容器(逻辑组)。您可以使用 2 或 3 个面板来解决容器/子项启用问题,并使用 BorderStyle 和 BackColor 属性使它们看起来像是一个面板(可能在唯一作用是定位子项的主面板上)。
您还可以“级联”启用事件中的逻辑相关元素。例如,考虑一个复选框“绝对位置”,它控制是否启用其他控件(X Pos、Y Pos)。 X 和 Y 的启用状态可以从 chkAbsPosition 上的事件切换,例如 CheckChanged 和 EnabledChanged。
根据您的表单,您可以切换 2 或 3 个控件,并让它们中的每一个依次设置相关元素的状态。
HTH
【讨论】:
面板是一个容器,它的 enabled 属性将取代它的子元素。因此,您必须启用面板才能启用控件。
您可以做的不是将控件放在面板中,而是放在面板上,并相应地启用禁用。这样一来,它们看起来就像不在面板中一样。
【讨论】:
我有一个很好的解决方案。
除非您真的想禁用面板,否则只需创建 2 个函数:
Function disablePanel()
For Each element In yourForm.yourPanel.controls
element.enabled = False
Next
Return Nothing
End Function
Function enablePanel()
For Each element In yourForm.yourPanel.controls
element.enabled = true
Next
Return Nothing
End Function
多亏了它,您禁用了面板中的所有组件,但不是您的面板。所以你仍然可以在你的面板上做任何你想做的事情,或者不禁用想要的控制:)
干杯。
【讨论】: