如何在 C# Winforms 中覆盖 Control.Enabled 属性?
How to override Control.Enabled property in C# Winforms?
我正在处理一个自定义控件。我想在启用或禁用时更改它的颜色。所以我在OnEnabledChanged
.
里面写了一段代码
protected override void OnEnabledChanged(EventArgs e)
{
if (!Enabled)
{
temp1 = colorOn;
temp2 = colorOff;
colorOff = colorOn = Color.LightGray;
}
else
{
colorOn = temp1;
colorOff = temp2;
}
Invalidate();
base.OnEnabledChanged(e);
}
此代码在运行时运行良好,但在设计时运行不佳。当我在设计时更改 Enabled
属性 时,它没有被引发。所以我想覆盖控件的Enabled
属性。但是打字的时候不显示。
那么我该如何覆盖它呢?如果有其他方法我想使用它。
这是完全正常的。控件设计者的一项工作是拦截某些属性和方法的行为,这些行为会干扰设计视图中控件的使用。 Enabled
属性 就是其中之一,如果它在设计时也能正常工作,那么您就再也无法 select 控件了。设计者当然不能让这种情况发生,它总是在设计时强制 Enabled = true 并拦截对 属性 的赋值。正如你所发现的。覆盖它也可以,它不是虚拟的 属性,但无论如何不会给你你想要的。 Visible
属性 是另一个被截获的,你可以想象那是怎么回事:)
您必须创建自己的设计器才能对此有所作为。这通常是用来杀死蚊子的火箭筒,尤其是在这种情况下,因为您仍然无法对启用进行任何操作。更糟糕的是,此行为是由 ControlDesigner class 实现的,您需要这种 class 作为基础 class 才能让设计人员开始工作。我严重怀疑它是否实用。
不采取任何措施来解决这个问题是完全合理的,因为当您在设计器中更改它们的启用 属性 时,工具箱中的其他控件 none 会改变它们的外观。
我正在处理一个自定义控件。我想在启用或禁用时更改它的颜色。所以我在OnEnabledChanged
.
protected override void OnEnabledChanged(EventArgs e)
{
if (!Enabled)
{
temp1 = colorOn;
temp2 = colorOff;
colorOff = colorOn = Color.LightGray;
}
else
{
colorOn = temp1;
colorOff = temp2;
}
Invalidate();
base.OnEnabledChanged(e);
}
此代码在运行时运行良好,但在设计时运行不佳。当我在设计时更改 Enabled
属性 时,它没有被引发。所以我想覆盖控件的Enabled
属性。但是打字的时候不显示。
那么我该如何覆盖它呢?如果有其他方法我想使用它。
这是完全正常的。控件设计者的一项工作是拦截某些属性和方法的行为,这些行为会干扰设计视图中控件的使用。 Enabled
属性 就是其中之一,如果它在设计时也能正常工作,那么您就再也无法 select 控件了。设计者当然不能让这种情况发生,它总是在设计时强制 Enabled = true 并拦截对 属性 的赋值。正如你所发现的。覆盖它也可以,它不是虚拟的 属性,但无论如何不会给你你想要的。 Visible
属性 是另一个被截获的,你可以想象那是怎么回事:)
您必须创建自己的设计器才能对此有所作为。这通常是用来杀死蚊子的火箭筒,尤其是在这种情况下,因为您仍然无法对启用进行任何操作。更糟糕的是,此行为是由 ControlDesigner class 实现的,您需要这种 class 作为基础 class 才能让设计人员开始工作。我严重怀疑它是否实用。
不采取任何措施来解决这个问题是完全合理的,因为当您在设计器中更改它们的启用 属性 时,工具箱中的其他控件 none 会改变它们的外观。