在多屏幕上协调消息框或对话框位置

本文关键字:对话框 位置 消息 协调 屏幕 | 更新日期: 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();
}