想弄一个位图按钮,用PictureBox做,处理单击事件很慢。
所以想到从Button类继承,发现重载OnPaint无效。
下面这段代码PC上正常的,能看到效果。
class ImageButton:Button
{
private Image image;
public Image Image
{
get
{
return image;
}
set
{
image = value;
}
}
protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics;
Rectangle rect = pe.ClipRectangle;
if (image != null)
{
g.DrawImage(image, 0, 0, rect, GraphicsUnit.Pixel);
}
else
{
base.OnPaint(pe);
}
}
}
------解决方案--------------------------------------------------------
把 Rectangle rect = pe.ClipRectangle => Rectangle rect = this.ClientRectangle.试试
------解决方案--------------------------------------------------------
从Control继承是比较可行的办法,所有的背景、文字等都自绘。
需要处理MouseDown、MouseUp等事件。
我这么做过,没发现4楼说的慢的问题,项目到目前还没有人反映说按钮单击响应慢。
个人认为楼主可以放心的按这个思路做下去。
------解决方案--------------------------------------------------------
顶楼上!!
------解决方案--------------------------------------------------------
有些控件是不会自动调用OnPaint的,之前我只研究过重写TextBox,重载OnPaint后就没有用。
只能通过用WinProc拦截Windows消息,调用Onpaint才行。
PC和WM区别还是挺大的,建议别再弄这个了,耽误时间。
挺麻烦的,建议楼主还是继承Control做吧,并不复杂。
------解决方案--------------------------------------------------------
Button是没有OnPaint重载的 OnBackGroudPaint也没有 根本不支持重绘
现在流行的做法就是继承Control 如果你觉得太慢 那就想问 你用这个Button不就为了点击一下么
------解决方案--------------------------------------------------------