Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在父窗口(打开器)中相对于控件的位置显示模式窗体_C#_Winforms - Fatal编程技术网

C# 如何在父窗口(打开器)中相对于控件的位置显示模式窗体

C# 如何在父窗口(打开器)中相对于控件的位置显示模式窗体,c#,winforms,C#,Winforms,嗯,我有一个表格,我打开时使用: ShowDialog(this); 我试图使用表单的Location属性来更改表单的位置,但我不明白这个位置到底是相对于什么的?我想在某个按钮下方打开此表单。那么如何做到这一点呢 谢谢。表单需要相对于屏幕左上角的坐标。但是,控件在窗体中的位置相对于窗体†的左上角 使用控件的Location属性查找其位置,然后在表单对象上调用PointToScreen,将其转换为屏幕坐标。然后,您可以将新表单相对于该表单进行定位 例如: var locationInForm =

嗯,我有一个表格,我打开时使用:

ShowDialog(this);
我试图使用表单的
Location
属性来更改表单的位置,但我不明白这个位置到底是相对于什么的?我想在某个按钮下方打开此表单。那么如何做到这一点呢


谢谢。

表单需要相对于屏幕左上角的坐标。但是,控件在窗体中的位置相对于窗体†的左上角

使用控件的
Location
属性查找其位置,然后在表单对象上调用
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();
}

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

我更喜欢这样:

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

设置表单位置的代码不正确。它应该是:
model.Location=新点(locationOnScreen.X,locationOnScreen.Y+myControl.Height+3)作为注释。。。modalForm.startingPosition必须是“手动”的,以考虑位置