主窗体Form里面,
一个按钮 new 了另一个form,
大概代码如下:
Form f = new Form()
Panel p = new Panel();
MainForm.Controls.Add(p);
f.TopLevel = false;
f.Dock = DockStyle.Fill;
f.Parent = p;
f.Show();
问题:Deactivate事件不能使用了,我知道整个过程父窗体并没有失去焦点。
我想在点击其它地方(不在子窗体控件内时)触发一个事件,像Deactivate类拟的,该如何做?
24 个解决方案
#1
在MainForm的Click里面判断是否在Panel空间里面呢?
#2
好麻烦呀,我有三个这样的子窗体,MainForm每点击一次就要遍历是否点在Panel里面,再乘以3倍,这性能……
#3
有没有人有更好的答案呀?
#4
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (msg.Msg >= 513 && msg.Msg <= 515 && msg.HWnd != this.Handle)
{
MessageBox.Show("ok");
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
#5
这个我放在子窗体里,进都不进来呀?
#6
朋友们,帮帮忙吧
#7
#8
不能让贴子沉呀,问题还没有解决!!!
#9
问题还没有解决,不能让帖子沉下去~~`
#10
第三天了,有知道的朋友吗?帮帮忙吧。
#11
你写个方法,MainForm除了Panel所有的事件都引用这个方法不就行了,要判断什么
#12
Control.Focus();
可以获得焦点啊
可以获得焦点啊
#13
上图吧。
业务员下面的那个窗体,是一个Form来的,我想点击界面的其它地方(包括没有控件的),有个事件通知那Form关闭或隐藏。是这个意思。
业务员下面的那个窗体,是一个Form来的,我想点击界面的其它地方(包括没有控件的),有个事件通知那Form关闭或隐藏。是这个意思。
#14
怎么搞了个小图,再传一次。
#15
Panel1_Leave()
{
Panel1.Hide();
}
{
Panel1.Hide();
}
#16
这事件唯一不满足的就是点窗体空白地方不会进触发~~
#17
这个星期再没人回答就关帖了
#18
为什么不用
Deactivate事件?
你show出子窗体之后要把子窗体激活啊。不然怎么会触发Deactivate
Deactivate事件?
你show出子窗体之后要把子窗体激活啊。不然怎么会触发Deactivate
#19
子窗体loading时已经this.Activate();没用的。
就是因为是Add进来的子窗体,Deactivate事件不会触发。
#20
你给一个异步的Activate,同步当然没用
#21
求指点,我还没理解。。。
#22
两种选择,
1,show的过程中异步去激活子窗体Activate。
2,show方法执行完毕之后再激活窗体Activate。
#23
还是不会怎么去异步激活子窗体呀,
例如:
大概代码如下:
Form f = new Form()
Panel p = new Panel();
MainForm.Controls.Add(p);
f.TopLevel = false;
f.Dock = DockStyle.Fill;
f.Parent = p;
f.Show();
//////////////
f.Activate();
this.BeginInvoke(委托)
这样么?????能否给一两行简单的代码示例
#24
唉,看下快要无满意答案结帖了
#1
在MainForm的Click里面判断是否在Panel空间里面呢?
#2
好麻烦呀,我有三个这样的子窗体,MainForm每点击一次就要遍历是否点在Panel里面,再乘以3倍,这性能……
#3
有没有人有更好的答案呀?
#4
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (msg.Msg >= 513 && msg.Msg <= 515 && msg.HWnd != this.Handle)
{
MessageBox.Show("ok");
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
#5
这个我放在子窗体里,进都不进来呀?
#6
朋友们,帮帮忙吧
#7
#8
不能让贴子沉呀,问题还没有解决!!!
#9
问题还没有解决,不能让帖子沉下去~~`
#10
第三天了,有知道的朋友吗?帮帮忙吧。
#11
你写个方法,MainForm除了Panel所有的事件都引用这个方法不就行了,要判断什么
#12
Control.Focus();
可以获得焦点啊
可以获得焦点啊
#13
上图吧。
业务员下面的那个窗体,是一个Form来的,我想点击界面的其它地方(包括没有控件的),有个事件通知那Form关闭或隐藏。是这个意思。
业务员下面的那个窗体,是一个Form来的,我想点击界面的其它地方(包括没有控件的),有个事件通知那Form关闭或隐藏。是这个意思。
#14
怎么搞了个小图,再传一次。
#15
Panel1_Leave()
{
Panel1.Hide();
}
{
Panel1.Hide();
}
#16
这事件唯一不满足的就是点窗体空白地方不会进触发~~
#17
这个星期再没人回答就关帖了
#18
为什么不用
Deactivate事件?
你show出子窗体之后要把子窗体激活啊。不然怎么会触发Deactivate
Deactivate事件?
你show出子窗体之后要把子窗体激活啊。不然怎么会触发Deactivate
#19
子窗体loading时已经this.Activate();没用的。
就是因为是Add进来的子窗体,Deactivate事件不会触发。
#20
你给一个异步的Activate,同步当然没用
#21
求指点,我还没理解。。。
#22
两种选择,
1,show的过程中异步去激活子窗体Activate。
2,show方法执行完毕之后再激活窗体Activate。
#23
还是不会怎么去异步激活子窗体呀,
例如:
大概代码如下:
Form f = new Form()
Panel p = new Panel();
MainForm.Controls.Add(p);
f.TopLevel = false;
f.Dock = DockStyle.Fill;
f.Parent = p;
f.Show();
//////////////
f.Activate();
this.BeginInvoke(委托)
这样么?????能否给一两行简单的代码示例
#24
唉,看下快要无满意答案结帖了