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