我正在使用自定义控件。我想在启用或禁用时更改其颜色。所以我在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
属性。但是在输入时它并没有显示出来。
那我怎么能覆盖呢?如果还有其他方法我想使用它。
答案 0 :(得分:4)
这完全正常。控制设计者的一项工作是拦截某些属性和方法的行为,这些属性和方法会干扰设计视图中控件的使用。 Enabled
属性就是其中之一,如果它在设计时也可以工作,那么你再也不能选择控件了。设计师当然不能让这种情况发生,它总是在设计时强制Enabled = true并截取属性的赋值。你发现了。覆盖它也可以工作,它不是虚拟财产,但无论如何都不会给你你想要的东西。 Visible
属性是另一个被截获的属性,你可以想象这是怎么回事:)
你必须创建自己的设计师才能做些什么。这通常是一个杀死蚊子的火箭筒,特别是在这种情况下,因为你仍然无法使用Enabled做任何事情。更糟糕的是,这种行为是由ControlDesigner类实现的,这是您作为基类获得设计师所需的类。我非常怀疑这是否切合实际。
根本没有做任何事情来解决这个问题是完全合理的,因为工具箱中的其他任何控件都不会在设计器中更改其Enabled属性时改变其外观。