我正在尝试在 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 初始化图像后更改按钮的大小以适合图像。对此有什么想法吗?
在构造函数中,BackgroundImage
is null
.
需要设置尺寸时BackgroundImage
通过覆盖属性来更改。
您还应该阴影Size
属性并添加[DesignerSerializationVisibilty(DesignerSerializationVisibility.Hidden)]
防止设计师保存尺寸。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)