winforms C# ShowDialog调用另一个ShowDialog

a2mppw5e  于 2023-05-01  发布在  C#
关注(0)|答案(3)|浏览(166)

我不确定这是否被允许,但我有一个主窗体调用另一个窗体与ShowDialog尝试调用另一个窗体相同。
例如:
form1 -〉form2。showdialog -〉form3.显示对话框
我在form 3的showdialog中得到一个错误:

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

这就是错误:
{“窗体showDialog尝试将不合格的窗体设置为其所有者。表单不能拥有自己或其所有者。\r\n参数名称:所有者”}
我不确定我是否理解了问题所在,是不是不允许从一个对话框窗体调用showdialog?
谢了,艾罗克

qvtsj1bj

qvtsj1bj1#

我不能从一个对话框的窗体调用showdialog吗?
你当然被允许了,这应该能起作用。
但我确实认为创建一个名为MainForm的对话框表单很奇怪。
我认为这是由事件中发生的其他事情引起的。mainForm在它的构造函数/Load-event中做什么?

wlp8pajw

wlp8pajw2#

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

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

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

dfddblmv

dfddblmv3#

尝试将.ShowDialog();替换为.ShowDialog(this);


相关问题