首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

point窗体绘制按钮,如何实现鼠标移动下去变换按钮

2012-09-20 
point窗体绘制按钮,怎么实现鼠标移动上去变换按钮写了一个类。C# codemessageGDI{PaintEventArgs pImage B

point窗体绘制按钮,怎么实现鼠标移动上去变换按钮
写了一个类。

C# code
messageGDI{        PaintEventArgs p;        Image Button_Default = Image.FromFile(Application.StartupPath + @"\skin_default\message\ico.png");;//一个button函数(主要是实现按钮绘制)public void button(string st,int x, int y)        {            Rectangle rect = new Rectangle(x,y,69,22);            p.Graphics.DrawImage(Button_Default, rect);            rect = new Rectangle(x + 20, y + 5, 69 , 22);            p.Graphics.DrawString(st, new Font("宋体", 10), Brushes.Black, rect);}}

之后我在
message窗体的point事件中写入:
C# code
 private void message_Paint(object sender, PaintEventArgs e){ messageGDI MessageForm = new messageGDI(); MessageForm._PainEventArgs = e;//我直接将paintEventArgs传进去。 MessageForm.button("确定",100,100);//重绘窗体,添加一个类似的按钮。}

现在要解决的问题是:
我使用事件mouseMove,当移动到窗体上的按钮位置时,我可以实现,按钮经过的样式。

尝试使用强制刷新,结果一直闪烁。。。

各位帮我下吧,谢谢了!应该能看懂问题吧?虽然我这个逻辑表达不是很好,~

[解决办法]
不要频繁创建messageGDI ,试试用一个全局的
[解决办法]
现在不说你这个代码,如果按一般做法,要么在OnPaint中直接绘制,move中调用invalidate重绘,要么封装一个类,传入e.Graphics
[解决办法]
MouseEnter()
Button1.BackGroundImage="c:\1.jpg"

MouseLeave
Button1.BackGroundImage="c:\2.jpg"

应尽量避免使用Paint,Paint将使你的窗体闪烁,并且造成用户交互的延迟。
[解决办法]
MouseHover和MouseLeave事件

热点排行