gpt4 book ai didi

c# - 加载表单而不显示它

转载 作者:可可西里 更新时间:2023-11-01 08:31:45 24 4
gpt4 key购买 nike

简短版本:我想在不使表单可见的情况下触发 Form_Load() 事件。这不起作用,因为 Show() 忽略了 Visible 属性的当前值:

tasksForm.Visible = false;
tasksForm.Show();

长版本:我有一个 WinForms 应用程序,它有两种形式:main 和 tasks。始终显示主窗体。用户可以点击一个按钮打开任务表单,也可以点击一些按钮直接运行任务而不打开任务表单。

当用户要求直接运行任务时,我只想调用任务表单上的一些公共(public)方法而不显示它。不幸的是,任务逻辑取决于 Form_Load() 事件中发生的事情。我能找到触发 Form_Load() 的唯一方法是调用 Show()。我能做的最好的事情就是以最小化状态显示表单:

tasksForm.WindowState = FormWindowState.Minimized;
tasksForm.Show();

我认为最干净的解决方案是将任务逻辑从任务表单中拉出并放入 Controller 类中。然后我可以从主窗体和任务窗体中使用该类,并且只在我需要它对用户可见时才加载任务窗体。但是,如果加载表单而不显示它是一件容易的事情,那将是一个较小的变化。

最佳答案

也许这里应该注意,您可以导致在不显示表单的情况下创建表单的窗口。我认为可能存在想要这样做的合法情况。

无论如何,不​​管设计好不好,你都可以这样做:

MyForm f = new MyForm();
IntPtr dummy = f.Handle; // forces the form Control to be created

我不认为这会导致 Form_Load() 被调用,但此时您将能够调用 f.Invoke() (这是我偶然发现这个 SO 问题时尝试做的事情) .

关于c# - 加载表单而不显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66921/

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