这是我的第一个问题,我有一个UserControl,其中包含其他控件,例如标签和图片框。如果禁用UserControl,则在设计时也应禁用其他控件。这意味着:如果禁用UserControl,则图片框应立即变灰。
每次触发“ EnabledChanged”事件时,图片框都会启用或禁用,但在设计时不会变灰。如果我运行代码,则图片框为灰色。
git show -s --pretty='format:%ci %s %h' $(git branch -r) | sort -r | head -n 1
当我更改设计器的属性时,我希望pictureBox变灰。如果我运行代码,则不会,仅在执行之前!我注意到“ EnabledChanged”事件不会在设计时触发,而只会在运行时触发。其他事件(例如“点击”)也会在设计时触发! 我怎样才能达到预期的结果?
谢谢。
答案 0 :(得分:0)
我想向您展示我的结果(如果您有相同的问题)。我并不完全满意,因为我无法覆盖“已启用”属性。 (在我的问题下的评论中,我写了“新问题”)
随便..
首先,我创建了一个新属性
private bool enabled = true;
public new bool Enabled2 {
get {...}
set {...}
}
然后我用新功能修改了属性中的“设置者”:
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; }
}
我要覆盖“已启用”属性的唯一原因是,如果其他开发人员使用此UserControl,则如果他禁用了整个控件,则该图片应显示为灰色。