如何在父窗口(开启器)中相对于控件的位置显示模态窗体

时间:2010-08-22 04:23:02

标签: c# winforms

好吧,我有一张打开的表格:

ShowDialog(this);

我尝试使用Location属性更改表单的位置,但我不明白这个位置到底是什么?我想在某个按钮下方打开此表单。那怎么办呢?

感谢。

2 个答案:

答案 0 :(得分:5)

表格将指向相对于屏幕左上角的坐标。但是, 表单中Control 的位置是相对于形式的左上角。

使用Control的Location属性查找其位置,然后在Form对象上调用PointToScreen将其转换为屏幕坐标。然后,您可以相对于该表单定位新表单。

例如:

var locationInForm = myControl.Location;
var locationOnScreen = mainForm.PointToScreen(locationInForm);

using (var model = new ModelForm())
{
    model.Location = new Point(locationOnScreen.X, locationOnScreen.Y + myControl.Height + 3);
    model.ShowDialog();
}

实际上是表单客户区的左上角。

答案 1 :(得分:4)

我更喜欢这个:

myModalForm.Location = New Point(myControl.PointToScreen(Point.Empty).X + myControl.Width, myControl.PointToScreen(Point.Empty).Y)