WinForm弹出窗口与父窗口的关系

3

好的,我正在使用Visual Studio 2010 Express编写一个WinForms C#程序。这个程序有两个窗体,一个是名为“MainForm”的主窗体,另一个是名为“ConfigForm”的次要窗体。MainForm上有一个按钮,点击它会弹出ConfigForm。

    private void buttonConfig_Click(object sender, EventArgs e)
    {
        new ConfigForm().Show();
    }

现在,当您单击按钮时,ConfigForm会在任何位置弹出。它不一定会弹出在MainForm的上方。我该如何让它弹出在主窗体的上方?我已经尝试将ConfigForm的StartPosition设置为CenterParent,但似乎没有效果。

另外,当ConfigForm打开时,我希望“锁定”程序。当ConfigForm处于打开状态时,我希望用户无法返回到MainForm。


你尝试过 new ConfigForm().Show(this); 吗? - ordag
2个回答

7

你可能正在寻找这样的东西:

private void buttonConfig_Click(object sender, EventArgs e)
{
  using (ConfigForm cf = new ConfigForm()) {
    cf.ShowDialog(this);
  }
}

确保像您指出的那样设置ConfigForm.StartPosition = CenterParent

在ConfigForm表单上,您可以像这样设置按钮的DialogResults

void buttonOK(object sender, EventArgs e) {
  this.DialogResult = DialogResult.OK;
  this.Close();
}

那么你的调用约定可以是:

private void buttonConfig_Click(object sender, EventArgs e)
{
  using (ConfigForm cf = new ConfigForm()) {
    if (cf.ShowDialog(this) == DialogResult.OK) {
      // do something the user said was ok
    }
  }
}

啊... .Show() 和.ShowDialog() 的区别我以前从来不知道。你为什么在这里使用 "using"? - Jason Axelrod
当 ConfigForm 超出范围时,它会调用 dispose。 - Chriseyre2000
@JasonAxelrod ShowDialog基本上会锁定弹出窗体上的程序,以便用户除了回答对话框之外不能做任何其他事情。using块将在关闭后方便地处理该窗体。 - LarsTech

1
尝试使用ShowDialog方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接