1

我有主窗体 Form1(Winform) 的 App1。Form1 启动一个非模态表单 Form2。Form2 使用显示模式对话框 DL1 的类库 CL1。

一旦显示Form2,然后显示DL1,DL1 的位置就在Form2 上方。

当 Form2 显示出来,然后通过拖动到不同的屏幕改变它的位置时,显示的 DL1 会超过 Form2 的原始位置(拖动前的位置)。我希望能够协调 DL1 在 Form2 上的位置,即使它移动。

我已经做了一些研究,但还没有可靠的解决方案。我希望在这里就这个问题进行讨论。

基本上 DL1 需要它的父位置。由于 parent 是一个类库,DL1 可能是使用我假设的一些 Windows 算法来显示的。

我尝试在关闭时保存 Form2 的位置并且每个位置都更改。希望在启动DL1时使用它。我认为它可能有效,但是您必须为每个对话框或消息框注册和维护。

顺便说一句,可能有 App2 和 App3 使用 CL1。

预先感谢。

4

1 回答 1

0

oinBeforeShowDialog()在 DL1 上调用,您需要将其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();
}
于 2013-05-07T06:11:57.110 回答