【发布时间】:2012-07-30 22:03:20
【问题描述】:
我正在构建 this question 并创建一个简单的 ImageButton 类,该类表示一个仅包含图像的按钮。我实现了(至少我相信我做到了)this answer 中的建议,但我仍然遇到此代码异常:
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.OnPaint(PaintEventArgs e) in ImageButton.cs:line48
第 48 行是这一行:
e.Graphics.DrawImage(BackgroundImage, 0, 0);
我意识到引发此错误是因为 BackgroundImage 未设置为值,但我不确定如何在代码中执行此操作。在实际应用中,这个类永远不会添加到设计器中,而是以编程方式添加。如何解决此异常?
【问题讨论】: