簡體   English   中英

調用子窗體事件替換或避免mdi父窗體事件

[英]calling an child form event replacing or avoiding the mdi parent form event

mdimain_MdiChildActivate ,為與GridControl mouseDoubleClick事件相關的所有子窗體定義了應用程序邏輯。 對於所有包含子表單的網格,它都可以正常工作,但在某些情況下,為子表單內部定義了網格mouseDoubleClick 因此,該事件從MdiParent觸發兩次,並從內部觸發。 是否有任何方法可以針對此mouseDoubleClick案例在不更改MDI表單中的代碼的情況下比較/驗證子窗體的ifexist大小寫而不會觸發MdiParent父控件事件。

示例示例:

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
}

這種方法檢測WM_NCHITTEST發送到您的郵件MainGridControl之前MdiChildActivate被解雇了。 這只能檢測是否在MainGridControl上使用了鼠標(Click,DoubleClick),但我認為它適合您的情況。

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;}
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM