C#ShowDialog调用另一个ShowDialog

时间:2010-11-02 18:10:04

标签: c# winforms

我不确定是否允许这样做但是我有一个主窗体,它使用ShowDialog调用另一个窗体,它试图调用另一个窗体。

所以,例如:

form1 - > form2.showdialog - > form3.showdialog

我在form3的showdialog中收到错误:

var ssscu = new SSS.SssTwainSimple.MainForm();
ssscu.ShowDialog();

这是错误:

  

{“表格showDialog试图设置一个   不合格的形式作为其所有者。形式   不能拥有自己或他们自己   所有者。\ r \ n参数名称:所有者“}

我不确定我明白问题是什么,我不能从一个对话形式的表单中调用showdialog吗?

谢谢, Eroc

3 个答案:

答案 0 :(得分:5)

  

我不允许从一个对话框的表单中调用showdialog吗?

你当然是被允许的,这应该有效。

但我确实认为你创建一个名为MainForm的对话框形式很奇怪。

我希望这是事件中发生的其他事情造成的。 mainForm在它的构造函数/ Load-event中做了什么?

答案 1 :(得分:3)

尝试使用.ShowDialog();

替换.ShowDialog(this);

编辑:我没有尝试过自己,但这是我开始寻找的地方。

答案 2 :(得分:3)

这是一个非常不寻常的例外。表单在构造函数创建时已经拥有了所有者。您没有使用ShowDialog(所有者)覆盖,因此Windows窗体必须为自己查找所有者。它找回完全相同的形式。这在技术上是可行的,但你必须写一些相当奇怪的代码。要诊断此问题,请将此代码添加到表单中:

    protected override void OnHandleCreated(EventArgs e) {
        base.OnHandleCreated(e);
    }

并设置断点。如果我的猜测是正确的,这将在 ShowDialog调用之前打破。查看调用堆栈以查看创建该窗口的语句。