gpt4 book ai didi

c# - 如何在图像按钮中将背景图像设置为无或其他默认值?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:43 24 4
gpt4 key购买 nike

我正在 build 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
}
}

当我尝试将此控件添加到设计器时,我得到了

The control ImageButton has thrown an unhandled exception in the designer and has been disabled.

Exception: Value cannot be null. Parameter name: image

Stack trace: ImageButton.OnPaint(PaintEventArgs e) in ImageButton.cs:line48

第 48 行是这一行:

e.Graphics.DrawImage(BackgroundImage, 0, 0);

我意识到这个错误是因为 BackgroundImage 没有设置值,但我不确定如何在代码中这样做。在实际应用中,这个类永远不会添加到设计器中,而是通过编程方式添加。我该如何解决这个异常?

最佳答案

    this.BackgroundImage = base.BackgroundImage;

是的,当然,有保证的异常(exception)。您希望有人在构造函数运行之前设置了 BackgroundImage 属性。这是不可能的,构造函数在可以设置控件上的任何属性之前运行。

接下来出错的是 Paint 事件也将在设计器中引发。在您将控件放到窗体上后会立即发生这种情况。这是一个 Kaboom,用户和您的代码都没有给 BackgroundImage 属性一个值。所以只需修复方法:

protected override void OnPaint(PaintEventArgs e)
{
if (BackgroundImage != null) e.Graphics.DrawImage(BackgroundImage, 0, 0);
}

关于c# - 如何在图像按钮中将背景图像设置为无或其他默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11730343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com