【发布时间】:2014-09-29 11:58:54
【问题描述】:
我定义了一个自定义按钮类,它在按钮启用/禁用时设置背景颜色。
在运行时启用外观 (A):
在运行时禁用外观 (B):
无论Enabled 属性的值如何,设计时外观始终为 (A)。
我希望我的控件在设计器中的显示方式与其在运行时的显示方式完全相同。有没有可能,如果有,怎么做?
这是我尝试过的(仅代码的相关部分):
Public Class StyledButton : Inherits Button
Private p_fEnabled As Boolean
<DefaultValue(True)>
Public Shadows Property Enabled As Boolean
Get
Return p_fEnabled
End Get
Set(value As Boolean)
p_fEnabled = value
MyBase.Enabled = value
UpdateVisualStyle()
End Set
End Property
Private Sub UpdateVisualStyle()
If Me.Enabled Then
'set enabled appearance
Else
'set disabled appearance
End If
End Sub
End Class
【问题讨论】:
-
你遗漏了最好的部分......设置启用/禁用的过程需要最终通过 Invalidate 调用 Paint
-
@Plutonix:我尝试在
UpdateVisualStyle的末尾调用Me.Invalidate(),也尝试了Me.Refresh()。尽管如此,在设计时没有改变行为。还有其他想法吗? -
控件在设计器中始终处于启用状态。正如将 Visible 设置为 False 实际上不会对 US 隐藏控件一样,启用状态也不会更改。当鼠标悬停在它们上方时启用 VisualStyles 时,它们也不会
glow。有些道具只是RT而已。如果 VisualStyles 处于活动状态,您可能还需要更改UseVisualStyleBackColor。 (IDE 中没有调用 prop setter - 使用 OnEnableChanged 来查看) -
@Plutonix:我知道这一点。这就是为什么我创建了自己的 Enabled 属性,它隐藏了原始的 Enabled 属性。所以理论上,设计师应该开始使用新的属性,正确地显示 Enabled 和 Disabled 的外观。
-
将名称更改为
neoEnabled即可使用(带无效)
标签: vb.net winforms button design-time appearance