[英]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.