在设计时控件的已启用外观?

编程入门 行业动态 更新时间:2024-10-25 18:25:06
本文介绍了在设计时控件的已启用外观?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

I defined a custom button class, which sets background color when button is enabled/disabled.

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

Enabled appearance at runtime (A):

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

Disabled appearance at runtime (B):

无论 Enabled 的值如何,设计时间外观始终为(A)属性。

Design time appearance is always (A), regardless of the value of Enabled property.

我希望控件在设计器中的显示与运行时的显示完全相同。

I would like my control to appear in designer exactly the way it would appear at run time. Is it possible and, if so, how can do it?

这是我尝试过的内容(仅代码的相关部分):

Here is what I tried (only relevant parts of the code):

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

推荐答案

shadowed属性确实可以在运行时设计,而不是在IDE中。您不想丢失 Visible = False 的控件,并且即使 Enabled = False 。由于IDE无意绘制禁用的控件,因此没有理由在更改属性时调用Invalidate。

The shadowed property does work as designed at runtime, just not in the IDE. You would not want to loose controls which are Visible = False, and you would want to drill into Button events even when Enabled = False. Since the IDE has no intention of drawing a disabled control, there is no reason for it to invoke Invalidate when you change the property.

由于它在运行时有效,请在设计器中欺骗它以使用另一个看起来像原始属性的属性:

Since it works at runtime, trick it in the designer to use another property which looks like the original:

<Browsable(False), DebuggerBrowsable(DebuggerBrowsableState.Never), EditorBrowsable(False)> Public Shadows Property Enabled As Boolean Get Return neoEnabled End Get Set(value As Boolean) neoEnabled = value End Set End Property

一个新属性,为IDE命名正确。

A new property, with the right name for the IDE.

<DisplayName("Enabled")> Public Property neoEnabled As Boolean Get Return p_fEnabled End Get Set(value As Boolean) p_fEnabled = value UpdateVisualStyle() MyBase.Enabled = p_fEnabled End Set End Property

遗憾的是, Enabled 和 neoEnabled 都将由Intellisense在代码中提供,但由于他们俩都做同一件事,这没什么大不了的。测试代码:

Sadly, both Enabled and neoEnabled will be offered by Intellisense in code, but since they both do the same thing, its not a big deal. test code:

Private Sub UpdateVisualStyle() If p_fEnabled Then ' other interesting stuff MyBase.BackColor = Color.Lime Else MyBase.BackColor = Color.LightGray End If MyBase.Invalidate() End Sub

您可能比我更努力,并提出了一个更干净的实现。

You have probably wrestled with it more that I, and come up with a cleaner implementation.

这将保留与 neoEnabled 状态相关的BackColor:

This persists the BackColor associated with neoEnabled state:

' 'StyledButton1 ' Me.StyledButton1.BackColor = System.Drawing.Color.LightGray Me.StyledButton1.Enabled = False Me.StyledButton1.neoEnabled = False

Me.StyledButton1.BackColor = System.Drawing.Color.Lime Me.StyledButton1.Enabled = False Me.StyledButton1.neoEnabled = True

更多推荐

在设计时控件的已启用外观?

本文发布于:2023-11-03 13:20:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1555221.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:控件   外观

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!