我有主窗体Form1(Winform)的App1。 Form1启动Form2的非模态形式。 Form2使用类库CL1,它显示模式对话框DL1。
一旦显示Form2,然后显示DL1,DL1的位置就在Form2上。
当显示Form2,然后通过将其拖动到另一个屏幕来更改其位置时,显示的DL1将超过Form2的原始位置(拖动前的位置)。我希望能够协调DL1在Form2上的位置,即使它移动了。
我做过一些研究,但还没有可靠的解决方案。我希望能在这里讨论这个问题。
基本上DL1需要其父位置。由于父类是一个类库,因此可能使用我假设的一些Windows算法来显示DL1。
我尝试在关闭时保存Form2的位置,并且每个位置都会更改。希望在启动DL1时使用它。我认为它可能有用,但是你必须为每个对话框或消息框注册和维护。
顺便说一句,可能有App2和App3使用CL1。
提前感谢。
答案 0 :(得分:0)
在DL1上调用ShowDialog()
之前,您需要将StartPosition
属性设置为FormStartPosition.Manual
。然后DL1将在您指定其位置的任何位置启动。
例如
Form2 dlg = new Form2();
dlg.StartPosition = FormStartPosition.Manual;
dlg.Location = this.Location;
dlg.ShowDialog();
这将启动dlg作为模式对话框,与调用代码的表单位于同一位置。
或者在DL1中重载ShowDialog函数,例如:
public void ShowDialog(Point start)
{
this.StartPosition = FormStartPosition.Manual;
this.Location = start;
this.ShowDialog();
}