2013-08-05 41 views
1

mdimain_MdiChildActivate中定義了與GridControlmouseDoubleClick事件有關的所有子表單 的應用程序邏輯。 它對所有包含子窗體的網格都正常工作,但在某些情況下,子窗體內部定義了網格mouseDoubleClick。 因此,該事件從MdiParent和內部部分發射兩次。 有沒有辦法讓MdiParent家長控制事件不會觸發此mouseDoubleClick案例比較/驗證子窗體的ifexist大小寫,而無需更改MDI窗體中的代碼。調用子表單事件來替換或避免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 
} 
+0

什麼是'GridControl'?某種'DataGridView'? –

+0

是的!一個DevExpress XtraGrid控件 – ViZ

回答

0

這種方法檢測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;} 
    } 
} 
+0

我嘗試了使用標誌,接口訪問的代碼,但需要避免或用一個子對象(對於某些情況)替換MdiChildActivation代碼。代碼應該獨立於父表單並且不類似於(自動調用)MdiParent激活控件。 – ViZ

+0

for more澄清:刪除子窗體訪問從父窗體MDI – ViZ

+0

@ user1069940嘗試我更新的答案,如果它不工作,我沒有任何其他解決方案,您的問題是不平凡的,因爲'控制事件系統設計',關鍵點是我們必須在'MdiChildActivate'之前知道'MouseDoubleClick' –