2011-03-28 89 views
1

干草全部。移动并将子窗口放在父窗口附近C#

我有一个表单,通过按下按钮创建一个子表单。 我希望它在父级的边界附近创建,

如果父窗体由用户移动,子窗口也移动。

谢谢。

+0

你能更具体吗? – novacara 2011-03-28 19:20:57

+0

你的意思是以编程方式将子窗口放在指定的地方?此外,你的意思是“靠近”父窗口? – Yetti 2011-03-28 19:21:25

回答

3

首先,您需要在父项中保留对子窗体的引用。 第二,你需要将一个委托转换为父级的Move和Resize事件(同一个委托方法就足够了)第三,你需要使用该方法将你的子表单放到你想要的位置。

下面的代码是你想要什么一个例子:

public partial class Form1 : Form 

{

Form2 _form2; 
    int _offset = 5; 

    public Form1() 
    { 
    InitializeComponent(); 
    this.Move += new EventHandler(MoveSubForm); 
    this.Resize +=new EventHandler(MoveSubForm); 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
    _form2 = new Form2(); 
    _form2.Show(); 
    MoveSubForm(this, e); 
    } 

    protected void MoveSubForm(object sender, EventArgs e) 
    { 
    if (_form2 != null) 
    { 
     _form2.Height = this.Height/2; 
     _form2.Width = this.Width/3; 
     _form2.Left = this.Left + this.Width + _offset; 
     _form2.Top = this.Top; 
    } 
    } 

这将让您的孩子形式在和谐与它的父了500像素的偏移那里的孩子1/2的高度和1/3的宽度作为父母。通过这个例子,我希望你能够从你的项目中获得你想要的东西。

干杯, CEC

+0

谢谢,我会尽量使用这个想法 – guyl 2011-03-28 22:10:03

0

那么,其所有者设置为其父窗口并以“正常”窗口状态打开的任何子窗口将默认以“级联”方式打开,稍微向下并在其父级的右侧。也许需要更多细节;你想让一个已经打开的孩子在父母被移动时保持与父母相对的位置吗?为此,只要保留对父窗口打开的任何子窗口的引用,并在窗体的LocationChanged事件的处理程序中,只需跟踪窗口在X和Y方向上的移动量,并将每个子窗口移动相同数量即可。