gpt4 book ai didi

c# - 如何覆盖 C# Winforms 中的 Control.Enabled 属性?

转载 作者:行者123 更新时间:2023-12-01 22:22:35 29 4
gpt4 key购买 nike

我有一个正在处理的自定义控件。我想在启用或禁用时更改它的颜色。所以我在 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 属性。但是打字的时候不显示。

那么我该如何覆盖它呢?如果有其他方法我想使用它。

最佳答案

这是完全正常的。控件设计者的一项工作是拦截某些属性和方法的行为,这些行为会干扰设计 View 中控件的使用。 Enabled 属性就是其中之一,如果它在设计时也能正常工作,那么您将永远无法再次选择该控件。设计者当然不能让这种情况发生,它总是在设计时强制 Enabled = true 并拦截对属性的分配。正如你所发现的。覆盖它也可以,它不是虚拟属性(property),但无论如何不会给你你想要的东西。 Visible 属性是另一个被拦截的属性,你可以想象那是怎么回事:)

您必须创建自己的设计器才能对此有所作为。这通常是用来杀死蚊子的火箭筒,尤其是在这种情况下,因为您仍然无法对启用进行任何操作。更糟糕的是,此行为是由 ControlDesigner 类实现的,您需要将这种类作为基类来让设计器运行。我严重怀疑它是否实用。

不采取任何措施来解决这个问题是完全合理的,因为当您在设计器中更改它们的 Enabled 属性时,工具箱中的任何其他控件都不会改变它们的外观。

关于c# - 如何覆盖 C# Winforms 中的 Control.Enabled 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087757/

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