如何让一个窗口A始终在另一个窗口B上面?且就算B获得焦点A也要在B上面?
最好给点代码。
对了A,B都可以相互访问对方的Public成员

解决方案 »

  1.   

    FormA frm=new FormA();
    frm.ShowDialog();
      

  2.   

    从消息入手。考虑一下NC_开头的消息,例如NC_NOTIFY。我只给思路。具体实现要靠你自己。木时间弄。
      

  3.   

    这个应该类似于查找替换窗口。可以通过Form的属性实现。
    使用窗体的属性
    说起属性关联,上面已经提到过Form.Owner属性,下面笔者根据MSDN文档来比较完整的讲一下,大部分的文字来自MSDN文档,为保证其完整性,对其中一些属性描述进行了扩展。Form.Owner 属性。获取或设置拥有此窗体的窗体。
    语法,public Form Owner { get; set; }
    若要使某窗体归另一个窗体所有,可为其 Owner 属性分配一个对将成为所有者的窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Form2 归窗体 Form1 所有,则关闭或最小化 Form1 时,Form2 也会关闭或最小化。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。
    Form.OwnedForms 属性。获取 Form 对象的数组,这些对象表示此窗体拥有的所有窗体。
    语法,public Form[] OwnedForms { get; }
    此属性返回包含此窗体拥有的所有窗体的数组。要使某窗体归另一个窗体所有,可调用 AddOwnedForm 方法。分配给所有者窗体的窗体将保持被拥有状态,直到调用了 RemoveOwnedForm 方法。如果窗体是多文档界面 (MDI) 父窗体,则除了当前打开的所有 MDI 子窗体外,此属性将返回所有显示的窗体。
    Form.MdiChildren 属性。获取窗体的数组,这些窗体表示以此窗体作为父级的多文档界面 (MDI) 子窗体。
    语法,public Form[] MdiChildren { get; }
    此属性使您得以获取对当前在某 MDI 父窗体中打开的所有 MDI 子窗体的引用。若要创建 MDI 子窗体,请将要成为 MDI 父窗体的 Form 分配给该子窗体的 MdiParent 属性。可以使用此属性依次通过所有 MDI 子窗体,以执行一些操作,如当 MDI 父窗体关闭时将数据保存到数据库中,或者根据应用程序中执行的操作更新子窗体上的字段。
    Form.MdiParent 属性。获取或设置此窗体的当前多文档界面 (MDI) 父窗体。
    语法,public Form MdiParent { get; set; }
    若要创建 MDI 子窗体,请将要成为 MDI 父窗体的 Form 分配给该子窗体的 MdiParent 属性。可以从某 MDI 子窗体使用此属性来获取所有子窗体都需要的全局信息或者调用对所有子窗体执行操作的方法。
    Form.ActiveForm 静态属性。获取此应用程序的当前活动窗体。
    语法,public static Form ActiveForm { get; }
    表示当前活动窗体,或者如果没有活动窗体,则为空引用。可以使用此方法获得对当前活动窗体的引用,以在该窗体或其控件上执行操作。
    Form.ActiveMdiChild 属性。获取当前活动的多文档界面 (MDI) 子窗口。
    语法,public Form ActiveMdiChild { get; }
    返回表示当前活动的 MDI 子窗口的 Form,或者如果当前没有子窗口,则返回 空引用。
    可使用此方法确定 MDI 应用程序中是否有任何打开的 MDI 子窗体。也可使用此方法从 MDI 子窗口的 MDI 父窗体或者从应用程序中显示的其他窗体对该 MDI 子窗口执行操作。
    ContainerControl.ParentForm 属性。获取将容器控件分配给的窗体。
    语法,public Form ParentForm { get; }
    将容器控件分配给的 Form。更多的内容可以参考这里,
    谈基于.net平台windows开发中的模式窗体
    http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx
      

  4.   

    把A窗体的Topmost属性改为true   B改为false
      

  5.   

        Form2 frm = new Form2();
                frm.Show();
                frm.Owner = this;
      

  6.   

    一种是设置你窗体的TopMost属性为True,另外一种是需要调用下面这个方法:[DllImport("user32.dll")]
    public static extern void SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
                             int X, int Y, int width, int height, int flags);
      

  7.   

    当你显示窗口A时,用下面这段代码.
    Form frmA=new Form(); 
    frmA.showDialog();
    showDialog()不是show(),这样可以显示模式窗体.
    你试下就知道了.保证是你想要的结果.
      

  8.   

    设置窗本的 TopMost 属性
    如: this.TopMost = true;