问题描述
哪位高手给点经验,指点迷津?窗体上控件如Panel,PictureBox的Paint事件,在哪些情况下触发?可否仅由我们调用RaiseEventPaint(myPanel,panelPaintEvent)时触发?如何做到?我的程序大致为:在窗体上放置一个Panel作容器,其中再放置PictureBox用于画图,可能稍微有点复杂吧~_~(1)自定义myClass,其中成员函数用于画图Draw(2)画图函数Draw触发Panel画图(3)Panel画图的Paint事件中调用过程DrawPanel实现在Panel画图(4)在DrawPanel过程末尾触发PictureBox的Paint事件(5)最终在PictureBox的Painte事件中完成Picturebox的画图过程FriendWithEventmyPanelAsSystem.Windows.Controls.PanelFriendWithEventmyPicboxAsSystem.Windows.Controls.PictureBoxPublicClassmyClassPublicShadowsEventPaint(ByValsenderAsObject,ByValeAsPaintEventArgs)PrivatepanelPaintEvntHanle,picboxPaintEvntHandleAsPaintEventArgsPublicSubDrawing()......RaiseEventPaint(myPanel,panelPaintEvntHanle)EndSubPrivateSubDrawPanel().......RaiseEventPaint(myPicBox,picboxPaintEvntHandle)EndSubPrivateSubmyPanel_Paint(ByValsenderAsObject,ByValeAsPaintEventArgs)HandlesmyPanel.Paint......CallDrawPanel()EndSubPrivateSubmyPicbox_Paint(ByValsenderAsObject,ByValeAsPaintEventArgs)HandlesmyPicbox.Paint......EndSubEndClass但是,以上程序导致频繁触发Paint事件,频繁画图,程序效率不高,可否帮忙改善:即仅在需要时RaiseEvent后才触发一次?
解决方案
解决方案二:
Paint肯定是实时触发的,自己写个class吧,在使用时再触发绘图事件。
解决方案三:
别让窗口被其他窗口挡住,不要最大最小话,不要改变窗口内容,别点按钮什么的.不要动任何东西,Paint消息的触发就很少了.
解决方案四:
什么都不要干Paint肯定是不会触发!这是最高的"效率"'---------------------------要改效率,使用多线程吧。
解决方案五:
谢谢各位大侠倾情解疑!不胜感激之至!To:kyle315我的程序中已经自定义myClass了,也想做到你所说的"自己写个class吧,在使用时再触发绘图事件。"可惜没有实现。你的意思是说,再另写个myControl类,继承Panel,PictureBox类,然后再在myClass中引用?如何实现在使用需要时才触发绘图事件?To:akirya窗体和画面上什么都不动,显然是不可能的,有更有效的方法吗?To:pjagz多线程如何实现?可否给个范例?不好意思,总觉得有程序语句似乎直观一点