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

Kar*_*rim 5 c# winforms

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

ShowDialog(this);
Run Code Online (Sandbox Code Playgroud)

我尝试使用其Location属性来更改表单的位置,但我不知道该位置相对于什么确切?我想在某个按钮下面打开此表单。那怎么办呢?

谢谢。

Tim*_*mwi 5

窗体将期望相对于屏幕左上角的坐标。但是,控件体内的位置是相对于窗体†的左上角。

使用控件的Location属性找到其位置,然后调用PointToScreenForm对象将其转换为屏幕坐标。然后,您可以相对于此放置新表格。

例如:

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();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 作为注释... modalForm.startingPosition 必须是“手动”以考虑位置 (2认同)

And*_*eli 5

我更喜欢这个:

myModalForm.Location = New Point(myControl.PointToScreen(Point.Empty).X + myControl.Width, myControl.PointToScreen(Point.Empty).Y)
Run Code Online (Sandbox Code Playgroud)