我写了一个form,接收它的子窗口的消息,然后在它的listbox中显示信息,显示的消息是需要从子窗口中取出来,但是每次处理到①的时候就会重新进入这个消息处理函数DefWndProc中,操作不能完成,请问怎么回事?protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
//接收自定义消息 ,并显示其参数
case myCtrl.USERREPORT:
int index = (int)m.LParam;
string s = m_aryCtrl[index].GetReport();  // ①
this.listBox1.Items.Add(s);
        break;
default:
base.DefWndProc(ref m);
break;
}
}

解决方案 »

  1.   

    子窗体实现IMessageFilter结果 PreFilterMessage方法 应该是更好的方式吧
      

  2.   

    重新进入这个消息处理函数应该是m_aryCtrl[index].GetReport()函数中向窗口发了消息或者调用了消息处理函数。
      

  3.   

    m_aryCtrl[index].GetReport()是调用我的控件myCtrl中的私有的string参数,没有发出消息
      

  4.   

    确切地说是这样的:
    1.主窗口产生一堆子控件;
    2.每个控件在完成一个动作后将一条信息写到自己的一个string的对象中,并且向主窗口发送消息;
    3.主窗口接到消息后从子控件中取出这条信息添加到listbox中;
    4.但是每次执行到取控件的信息时候就重新进入DefWndProc()中,导致无法取到控件的信息
      

  5.   

    你调试跟踪到GetReport里面看看。
      

  6.   

    根本就进不到GetReport里面就重新进入DefWndProc()了,我将GetReport()要取的变量设成public,直接取都不行
      

  7.   

    你把string s定义为类成员试试。
      

  8.   

    感谢大家的热情帮助,虽然消息问题还是无法解决,不过我将主窗口的listbox直接传给各个子控件,虽然不是太好,但毕竟可以解决问题了。散分。