【发布时间】:2011-06-15 07:48:35
【问题描述】:
我正在尝试在 Visual Studio 2010 的 .NET 4.0 Winforms 应用程序中创建一个按钮,该按钮只是一个图像。我有一个无边框的窗口,并且有一个背景图像,该图像构成了此应用程序的自定义皮肤。对于窗口右上角的关闭/最小化按钮,我想创建 2 个简单的按钮,它们只是看起来像典型的 Windows 关闭/最小化按钮的图像。
我的这个设计可能有误,如果我错了,请告诉我。到目前为止,我已经确定我需要为仅呈现图像的 Button 创建一个子类。最终实现需要为每个按钮状态(正常、悬停、单击等)渲染不同的图像。这是我目前所拥有的:
public class ImageButton : Button
{
Pen pen = new Pen( Color.Red, 1.0f );
public ImageButton()
{
SetClientSizeCore( BackgroundImage.Width, BackgroundImage.Height );
}
protected override void OnPaint( PaintEventArgs e )
{
e.Graphics.DrawImage( BackgroundImage, 0, 0 );
//e.Graphics.DrawRectangle( pen, ClientRectangle );
//Rectangle bounds = new Rectangle( 0, 0, Width, Height );
//ButtonRenderer.DrawButton( e.Graphics, bounds, PushButtonState.Normal );
//base.OnPaint(pevent);
}
protected override void OnPaintBackground( PaintEventArgs e )
{
// Do nothing
}
}
此时,假设这个设计是合适的,我需要知道如何恰当地调用 SetClientSizeCore()。在构造函数中调用它会引发异常。我认为这是因为控件还没有机会初始化。我不确定要覆盖哪个函数,它可以让我在.NET 初始化后更改按钮的大小以适应图像。对此有何想法?
【问题讨论】:
-
我自己也尝试过,但意识到一个更简单的解决方法是使用 PictureBox 控件,因为它有一个点击事件,而且我不需要其他任何东西,特别是按钮对象.