gpt4 book ai didi

c# - 关闭一个子窗体会关闭另一个子窗体

转载 作者:太空狗 更新时间:2023-10-30 01:05:34 26 4
gpt4 key购买 nike

在下面的代码中,Form1 打开另外两个 Form,然后关闭其中一个。结果是第二个子窗体也被关闭。为什么?

public partial class Form1 : Form
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer { Interval = 2000 };

public Form1()
{
InitializeComponent();
ShowForm3();
(new Form2()).ShowDialog();//If this is changed to 'Show' - it doesn't get closed.
}

void ShowForm3()
{
Form3 f3 = new Form3();
f3.Show();
timer.Tick += (sender, e) => f3.Close();
timer.Start();
}
}

Form2Form3 是默认的 VS Forms。

(另外:这是原始代码的简单版本。在原始代码中(当然,太长了,无法在此处发布)从 Visual Studio 执行时不会发生这种情况 (既不是 Debug 也不是 Release。它只发生在作为 clickonce 应用程序安装时,然后 - 即使我只是单击可执行文件(在 AppData 文件夹下)。(也许有一些其他代码阻止它发生时从 VS 执行但我还没有找到什么。)可能是什么导致了这种差异?也许是在常规 Release模式下没有完成的 clickonce 中的某种类型的优化?)

最佳答案

将您的代码更改为可以工作的代码:

  public partial class Form1 : Form
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer { Interval = 2000 };

public Form1()
{
InitializeComponent();
ShowForm3();
(new Form2()).ShowDialog(this);
}

void ShowForm3()
{
Form3 f3 = new Form3();
f3.Show();
timer.Tick += (sender, e) => f3.Close();
timer.Start();
}
}

解释:当你没有传递父表单时,窗口将使用此方法作为事件窗口作为父窗口:GetActiveWindow发生的事情是:

当调用 form2.showDialog() 时//父窗口是 form 3,因为 GetActiveWindow 方法获取正在显示的窗口,而 form1 不是事件的或正在显示的

当你强制 parent 时:当调用 form2.showDialog(this)//父窗口是 form 1 因为你定义了 fixed

关于c# - 关闭一个子窗体会关闭另一个子窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18387596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com