问题描述
当我用以下代码进入一个窗体时Formms=newForm();ms.Show();无法进入ms中预先定义好的OnPaint,根本就不进入函数protectedoverridevoidOnPaint(PaintEventArgse){}只有在Application.Run(ms)下才能进入这是为什么?
解决方案
解决方案二:
在ms窗体的构造函数里加上this.SetStyle(ControlStyles.UserPaint,true);看看
解决方案三:
因为你没去研究OnPaint或Application.Run的本质。首先给你说OnPaintOnPaint是重绘事件,是Windows给的WM_PAINT消息,所以要收到这个消息才有可能触发这个事件然后是Application.Run(ms)这个意思是在ms这个窗体上开始主消息循环,就是这样一个过程whileGetMessage/PeekMessage(Msg)//取出主线程的消息{TranslateMessage(Msg);//转换消息DispatchMessage(Msg);//分发消息(可以把消息发到目的窗体)}所以没DispatchMessage的话,窗体是收不到消息的,窗体收到的消息实际上是主线程消息队列中取出来然后Dispatch给它的。
解决方案四:
在未调用Application.Run()方法前你的程序并未建立消息循环,因此你的窗体收不到任何消息。关于消息循环你可以参见Win32SDK.
解决方案五:
Formms=newForm();ms.Show();
你这里生成的Form的实例,而不是你自己定义的Form的派生类的实例,所以,这里生成的ms这个Form,只会执行原始的Form类的OnPaint方法,而不会执行你所定义的OnPaint方法。
解决方案六:
TO:lake_cx那我该如何发送消息呢?我这是从一个窗体中调用另一个窗体To:Misaki新建的窗体如何建立消息循环呢?To:dancingbit那个Form只是代表窗体意思To:hopewoo我这个是WindowsMobile程序,所以没有SetStyle方法谢谢大家!
解决方案七:
To:hopewoo我这个是WindowsMobile程序,所以没有SetStyle方法为什么现在提问的都这样呢。。。你认为我们是神仙,都能猜到你的实际情况?
解决方案八:
呵呵,不好意思,本来在移动板块问的,但是人太少了我想都是Winform,原理都差不多的,就没有说明。。