首页 > 解决方案 > 如果在设计期间启用 = false,则灰色 UserControl 输出

问题描述

这是我的第一个问题,我有一个 UserControl,其中包含标签和图片框等其他控件。如果我禁用 UserControl,其他控件也应该在设计时禁用。这意味着:如果我禁用 UserControl,图片框应该立即变灰。

每次“EnabledChanged”事件触发时,图片框都会启用或禁用,但在设计时不会灰显。如果我运行代码,图片框是灰色的。

private void ProgressButtonImageText_EnabledChanged(object sender, EventArgs e) {
   if (Enabled == false)    
       pictureBox1.Enabled = false;
   else
       pictureBox1.Enabled = true;
}

当我更改设计器的属性时,我希望图片框变灰。如果我运行代码,则不会,仅在之前!我注意到“EnabledChanged”事件不会在设计时触发,只会在运行时触发。其他事件,如“点击”也会在设计时触发!我怎样才能达到预期的结果?

谢谢。

标签: c#winforms

解决方案


我想向您展示我的结果(如果您有同样的问题)。我并不完全高兴,因为我无法覆盖“启用”属性。(在我的问题下的评论中,我写了我的“新问题”)

任何..

首先,我创建了一个新属性

private bool enabled = true;
public new bool Enabled2 {
    get {...}
    set {...}
}

然后我用我的新函数修改了属性中的“setter”:

public new bool Enabled2 {
            get { return enabled; }
            set {
                this.Enabled = enabled = pictureEdit1.Enabled = labelControl1.Enabled = value;
                if (pictureEdit1.Image != null && !enabled)
                    pictureEdit1.Image = setImageDisabled(pictureEdit1.Image);
                else
                    //buttonImage is a property which saves the "normal" image
                    pictureEdit1.Image = buttonImage;

                //without this, the Image doesn't update
                if (DesignMode)
                    Invalidate();
            }
        }

最后但同样重要的是,我的函数“setImageDisabled”:

    private Image setImageDisabled(Image image) {
            try {
                Image grayedImage = ToolStripRenderer.CreateDisabledImage(image);
                return grayedImage;
            } catch { return null; }
        }

我要覆盖“启用”属性的唯一原因是,如果其他开发人员使用此用户控件,如果他禁用整个控件,图片应该变灰。


推荐阅读