在做俩个Form联动,有一个小问题,描述如下:
mainForm 主 窗 口 注:不可最大化
toolForm 工具窗口 tool省略位置代码......
mainForm中添加sizeChange事件
if (this.WindowState == FormWindowState.Normal)
{
toolForm.Visible = true;
toolForm.Active();
}
if (this.WindowState == FormWindowState.Minimized)
{
toolForm.Visible = false;
}运行后情况如下
情况1)点击工具栏中 mainForm 标志
最小化 mainForm 正常
恢 复 mainForm 正常
情况2)
1、当mainForm处于普通状态 toolForm正常显示 激活任意一个窗口并且最大化(例如IE)
2、点击工具栏中的mainForm标志,mainForm显示、但是toolForm不显示
3、点击工具栏中mainForm标志,最小化 mainForm
4、点击工具栏中mainForm标志,恢 复 mainForm、toolForm可以正常显示请问如何解决 情况2)中的 第2点的问题?附:
如果在mainForm中添加GotFocus事件
toolForm.Visible = true;
toolForm.Activate();
this.Focus();
可以解决上述问题,但会造成死循环,导致mainForm无法激活 - -!
mainForm 主 窗 口 注:不可最大化
toolForm 工具窗口 tool省略位置代码......
mainForm中添加sizeChange事件
if (this.WindowState == FormWindowState.Normal)
{
toolForm.Visible = true;
toolForm.Active();
}
if (this.WindowState == FormWindowState.Minimized)
{
toolForm.Visible = false;
}运行后情况如下
情况1)点击工具栏中 mainForm 标志
最小化 mainForm 正常
恢 复 mainForm 正常
情况2)
1、当mainForm处于普通状态 toolForm正常显示 激活任意一个窗口并且最大化(例如IE)
2、点击工具栏中的mainForm标志,mainForm显示、但是toolForm不显示
3、点击工具栏中mainForm标志,最小化 mainForm
4、点击工具栏中mainForm标志,恢 复 mainForm、toolForm可以正常显示请问如何解决 情况2)中的 第2点的问题?附:
如果在mainForm中添加GotFocus事件
toolForm.Visible = true;
toolForm.Activate();
this.Focus();
可以解决上述问题,但会造成死循环,导致mainForm无法激活 - -!
toolForm.Visible = true;
toolForm.Activate();
this.Focus();
可以解决上述问题,但会造成死循环,导致mainForm无法激活 - -! 不能调用this.focus()
2、非激活:A)缩小在任务栏上 B)激活了其他窗口(把先前的窗口盖住了-- 先前的窗口丢失了焦点)。从非激活A 转换为 激活(最大化或普通状态)会产生 sizeChange 事件与GotFouce事件 反之亦然。从非激活B 转换为 激活(最大化或普通状态)只产生 GotFouce事件。用代码将form前端显示只能用 Active()方法,对toolForm窗口使用 Active() 会导致mainForm失去焦点。请问:是否有其他代码能让窗口前端显示? 或有没有一个参数可以显示当前窗口在Windows中的显示层级?以前看过一个色谱模拟软件,七八个窗口一起联动,完全没有问题。自己做不出来,太郁闷了啦,高手帮帮忙吧!
toolForm.show(mainForm);把你那些代码通通删除。
写在主窗口gotFouce事件中,产生如下错误:
已经可见的窗体不能显示为模式对话框。在调用 Show 之前应将窗体的 Visible 属性设置为 false。改成:
toolForm.Visible = false;
toolForm.show(mainForm);mainFor无法获得焦点 - -!
试试这个Activated += delegate
{
if (form2 != null && !form2.IsDisposed)
SetWindowPos(form2.Handle, Handle, 300, 300, 300, 300, 1 | 2 | 0x10 | 0x40);
};[DllImport("user32.dll")]
public extern static int SetWindowPos(IntPtr hwnd, IntPtr hwndinsertafter, int x, int y, int width, int height, uint uflags);
uflag参数值:
#define SWP_NOSIZE 0x0001
#define SWP_NOMOVE 0x0002
#define SWP_NOACTIVATE 0x0010
#define SWP_SHOWWINDOW 0x0040