在做俩个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无法激活 - -!

解决方案 »

  1.   

    如果在mainForm中添加GotFocus事件 
    toolForm.Visible = true; 
    toolForm.Activate(); 
    this.Focus(); 
    可以解决上述问题,但会造成死循环,导致mainForm无法激活 - -! 不能调用this.focus()
      

  2.   

    这个问题非常非常捣浆糊程序中用到了 windows  中窗口的4个状态1、激活:A)最大化 B)普通状态
    2、非激活:A)缩小在任务栏上 B)激活了其他窗口(把先前的窗口盖住了-- 先前的窗口丢失了焦点)。从非激活A 转换为 激活(最大化或普通状态)会产生 sizeChange 事件与GotFouce事件  反之亦然。从非激活B 转换为 激活(最大化或普通状态)只产生 GotFouce事件。用代码将form前端显示只能用 Active()方法,对toolForm窗口使用 Active() 会导致mainForm失去焦点。请问:是否有其他代码能让窗口前端显示? 或有没有一个参数可以显示当前窗口在Windows中的显示层级?以前看过一个色谱模拟软件,七八个窗口一起联动,完全没有问题。自己做不出来,太郁闷了啦,高手帮帮忙吧!
      

  3.   

    toolForm显示这样写。
    toolForm.show(mainForm);把你那些代码通通删除。
      

  4.   

    toolForm.show(mainForm)
    写在主窗口gotFouce事件中,产生如下错误:
    已经可见的窗体不能显示为模式对话框。在调用 Show 之前应将窗体的 Visible 属性设置为 false。改成:
    toolForm.Visible = false;
    toolForm.show(mainForm);mainFor无法获得焦点 - -!
      

  5.   

    你的意思是激活form1的时候让form2在后面显示?
    试试这个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