调用子窗体事件以替换或避免mdi父窗体事件
本文关键字:事件 窗体 mdi 替换 调用 | 更新日期: 2023-09-27 18:26:37
在mdimain_MdiChildActivate
中,为所有子窗体定义应用程序逻辑与CCD_ 2 mouseDoubleClick
事件相关。它适用于所有包含子窗体的网格,但在某些情况下,网格mouseDoubleClick
是为子窗体内部定义的。因此,该事件被触发两次,一次来自MdiParent
,另一次用于内部。是否有任何方法可以使MdiParent
父控件事件不会为该mouseDoubleClick
事例激发,从而在不更改MDI窗体中的代码的情况下比较/验证子窗体的ifexist
事例。
示例:
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
}
此方法检测在MdiChildActivate
被激发之前发送到MainGridControl
的WM_NCHITTEST
消息。这只能检测您的鼠标是否在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;}
}
}