私はこの質問を基にして、画像のみを含むボタンを表す単純な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は、デザイナーで未処理の例外をスローし、無効になっています。
例外:値をnullにすることはできません。パラメータ名:画像
スタックトレース:ImageButton.cs:line48のImageButton.OnPaint(PaintEventArgs e)
48行目は次の行です。
e.Graphics.DrawImage(BackgroundImage, 0, 0);
が値に設定されていないためにこのエラーがスローされることBackgroundImage
はわかりましたが、コードでその方法がわかりません。実際のアプリケーションでは、このクラスはデザイナーに追加されることはなく、プログラムで追加されます。この例外を修正するにはどうすればよいですか?