我正在构建这个问题并创建一个简单的 ImageButton 类,该类表示一个仅包含图像的按钮。我实施了(至少我相信我做到了)这个答案中的建议,但我仍然得到这个代码的异常:
public class ImageButton : Button
{
// Overrides the property
public override Image BackgroundImage
{
get { return base.BackgroundImage; }
set
{
base.BackgroundImage = value;
if (value != null) this.Size = value.Size;
}
}
// Shadows the property (note the -new- keyword)
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new Size Size
{
get
{
return base.Size;
}
set
{
base.Size = value;
}
}
public ImageButton()
{
this.BackgroundImage = base.BackgroundImage;
this.BackgroundImageChanged += new EventHandler(ImageButton_BackgroundImageChanged);
}
void ImageButton_BackgroundImageChanged(object sender, EventArgs e)
{
this.Size = this.BackgroundImage.Size;
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawImage(BackgroundImage, 0, 0); // <-- Error occurs here
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// Do nothing
}
}
当我尝试将此控件添加到设计器时,我得到
控件 ImageButton 在设计器中引发了未处理的异常并已被禁用。
例外:值不能为空。参数名称:图像
堆栈跟踪:ImageButton.cs:line48 中的 ImageButton.OnPaint(PaintEventArgs e)
第 48 行是这一行:
e.Graphics.DrawImage(BackgroundImage, 0, 0);
我意识到抛出此错误是因为BackgroundImage
未设置为值,但我不确定如何在代码中执行此操作。在实际应用中,这个类永远不会添加到设计器中,而是以编程方式添加。我该如何解决这个异常?