gpt4 book ai didi

vb.net - 控件在设计时启用的外观?

转载 作者:行者123 更新时间:2023-12-02 06:33:48 24 4
gpt4 key购买 nike

我定义了一个自定义按钮类,它在按钮启用/禁用时设置背景颜色。

在运行时启用外观 (A):

enter image description here

在运行时禁用外观 (B):

enter image description here

无论 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

最佳答案

我会解释为什么它会这样。控件在设计时的行为与在运行时一样。它在 Winforms 设计器中提供了强大的 WYSIWYG 支持。但是某些属性在设计时非常尴尬,例如,您实际上并不希望 Visible 属性生效。即使您在属性窗口中将 Visible 设置为 False,该控件仍保持可见非常重要。

这是控件的设计者的核心角色。它拦截了这些困难的属性并模仿它们。在属性网格中显示 预期 值,但实际上并未将它们传递给控件的属性 setter 。

Enabled 属性适合此类别。如果它没有被拦截,则无法再选择控件。其他的是 ContextMenu、AllowDrop、UserControl 和 Form 的位置等。您的阴影替换不会欺骗设计师,它使用反射按名称查找属性。所以你的属性没有任何效果,你的属性 setter 根本不会被调用。

只有通过重写控件的 OnPaint() 才能真正做到这一点,这样您就可以在设计时显示不同的颜色。还有一个定制设计师来戳它。然而,一个重要的问题是替换按钮的渲染器并不简单,它实现了 OnPaint() 方法。微软决定让渲染器内部,你不能覆盖它们。

太麻烦了,我建议你放弃这个。

关于vb.net - 控件在设计时启用的外观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25162260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com