如何重写控制.c# Winforms中的Enabled属性

本文关键字:Winforms 中的 Enabled 属性 控制 何重写 重写 | 更新日期: 2023-09-27 18:03:33

我有一个我正在工作的自定义控件。我想在启用或禁用时改变它的颜色。所以我在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属性。但是输入的时候没有显示出来。

那么我如何重写它呢?如果有别的方法我想用

如何重写控制.c# Winforms中的Enabled属性

这完全正常。控件设计器的一项工作是拦截干扰设计视图中控件使用的某些属性和方法的行为。Enabled属性是其中之一,如果它在设计时也能工作,那么您就再也不能选择控件了。当然,设计师不能让这种情况发生,它总是在设计时强制启用= true,并拦截对属性的赋值。正如你所发现的。重写它也可以工作,它不是虚拟财产,但无论如何也不会给你想要的。Visible属性是另一个被拦截的属性,你可以想象它是如何出错的:)

你必须创建自己的设计器来做一些事情。一般来说,这是一种用来杀死蚊子的火箭筒,特别是在这种情况下,因为您仍然无法使用Enabled执行任何操作。更糟糕的是,这种行为是由ControlDesigner类实现的,这种类是你需要作为一个基类来让设计器运行的。我非常怀疑这是否可行。

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