在多屏幕上协调消息框或对话框位置
本文关键字:对话框 位置 消息 协调 屏幕 | 更新日期: 2023-09-27 18:12:25
我有App1与主表单Form1(Winform)。Form1启动一个非模态表单Form2。Form2使用类库CL1来显示模态对话框DL1。
一旦显示Form2,然后显示DL1,则DL1的位置在Form2之上。
当显示Form2时,将其拖动到不同的屏幕改变其位置,显示的DL1将位于Form2的原始位置(拖动前的位置)上方。我希望能够协调DL1在Form2上的位置,即使它移动。
我做了一些研究,但还没有确切的解决方案。我希望在这里围绕这个问题进行讨论。基本上DL1需要它的父位置。由于parent是一个类库,所以我认为DL1可能是通过使用一些Windows算法来显示的。
我试着在关闭和每个位置更改时保存Form2的位置。希望在启动DL1时使用它。我认为它可能工作,但你将不得不注册和维护每个对话框或消息框。
顺便说一下,可能会有使用CL1的App2和App3。
提前感谢。
in在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();
}