干草全部。
我有一个表单,通过按下按钮创建一个子表单。 我希望它在父母的边界附近创建,
如果父表单被用户移动,那么子窗口也是如此。
感谢。
答案 0 :(得分: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;
}
}
这将使您的孩子与其父母保持一致,其父母的高度为1/2,宽度为父母的1/3。通过这个例子,我希望你能从你的项目中得到你想要的东西。
干杯, CEC
答案 1 :(得分:1)
好吧,任何将其所有者设置为其父窗口并以“正常”窗口状态打开的子窗口,默认情况下将以“级联”方式打开,稍微向下并向其父级右侧打开。也许需要更多细节;你希望一个已经打开的孩子在移动父母时保持相对于父母的位置吗?为此,只需保留对父窗口打开的子窗口的引用,并在窗体的LocationChanged事件的处理程序中,只跟踪窗口在X和Y方向上移动了多少,并将每个子窗口移动相同的量。