1

在应用程序中为所有与事件mdimain_MdiChildActivate相关的子表单定义逻辑。GridControl mouseDoubleClick它适用于所有包含子表单的网格,但在某些情况下,网格mouseDoubleClick是为子表单内部定义的。MdiParent因此,该事件从内部触发两次。有没有什么办法可以让MdiParent父控件事件在这种情况下不会触发mouseDoubleClick比较/验证ifexist子表单的情况而不更改 MDI 表单中的代码。

示例:

private void MDIMain_MdiChildActivate(object sender, EventArgs e)
{
    // code should not work
}      

private void MainGridControl_MouseDoubleClick(object sender, MouseEventArgs e)
{
  ///  Child Form : code should work
}
4

1 回答 1

0

这种方法检测WM_NCHITTEST发送到您MainGridControl之前的消息MdiChildActivate被触发。这只能检测您的鼠标是否使用(单击,DoubleClick),MainGridControl但我认为它适合您的情况。

public class Form1 : Form {
   public Form1(){
      InitializeComponent();
      Load += (s,e) => {
         gridProc.AssignHandle(MainGridControl.Handle);
      };
   }
   MainGridProc gridProc = new MainGridProc();
   private void MDIMain_MdiChildActivate(object sender, EventArgs e)
   {
       if(gridProc.HitTestOn) { gridProc.HitTestOn = false; return; }
       //code is still run if HitTestOn = false
       //.......
   }   
   public class MainGridProc : NativeWindow {
      protected override void WndProc(ref Message m){
         if(m.Msg == 0x84)//WM_NCHITTEST
         {
            HitTestOn = true;
         }
         base.WndProc(ref m);
      }
      public bool HitTestOn {get;set;}
   }
}
于 2013-08-05T12:41:28.563 回答