单一表单在启动时隐藏
我有一个带有一个窗体的应用程序,在Load方法上,我需要隐藏窗体。
该表单将在需要时显示(按照Outlook 2003样式弹出窗口的思路显示),但是我无法弄清楚如何在加载时隐藏表单而不会造成混乱。
有什么建议?
解决方案
回答
这是一个简单的方法:
在C中(目前我没有VB编译器)
public Form1() { InitializeComponent(); Hide(); // Also Visible = false can be used } private void Form1_Load(object sender, EventArgs e) { Thread.Sleep(10000); Show(); // Or visible = true; }
回答
在设计器中,将表单的Visible属性设置为false。然后避免调用Show()直到需要它为止。
更好的范例是在需要表单之前不要创建表单的实例。
回答
我来自C#,但在vb.net中应该非常相似。
在主程序文件的Main方法中,我们将看到以下内容:
Application.Run(new MainForm());
这将创建一个新的主表单,并将应用程序的生命周期限制为该主表单的生命周期。
但是,如果删除Application.Run()的参数,则该应用程序将在启动时不显示任何表单,并且可以随意显示和隐藏表单。
与其在Load方法中隐藏表单,不如在调用Application.Run()之前初始化表单。我假设表单上会显示一个NotifyIcon,以在任务栏中显示一个图标,即使表单本身尚不可见,也可以显示该图标。从NotifyIcon事件的处理程序中调用Form.Show()或者Form.Hide()将分别显示和隐藏表单。
回答
启动不带表单的应用程序意味着我们将不得不自行管理应用程序的启动/关闭。
从不可见的形式开始窗体是一个更好的选择。
回答
我用这个:
private void MainForm_Load(object sender, EventArgs e) { if (Settings.Instance.HideAtStartup) { BeginInvoke(new MethodInvoker(delegate { Hide(); })); } }
显然,我们必须更改if条件。
回答
此示例支持完全隐身,并且仅支持系统托盘中的NotifyIcon,无需单击,等等。
此处更多信息:http://code.msdn.microsoft.com/TheNotifyIconExample
回答
为什么这样呢?
为什么不只是像控制台应用程序一样开始,并在必要时显示表单?除了将控制台应用程序与表单应用程序分开的参考之外,没有什么其他的。
当我们甚至不需要它时,也不必贪婪地获取表单所需的内存。
回答
扩展主要形式:
using System.Windows.Forms; namespace HideWindows { public class HideForm : Form { public HideForm() { Opacity = 0; ShowInTaskbar = false; } public new void Show() { Opacity = 100; ShowInTaskbar = true; Show(this); } } }
例如:
namespace HideWindows { public partial class Form1 : HideForm { public Form1() { InitializeComponent(); } } }
本文中的更多信息(西班牙语):
http://codelogik.net/2008/12/30/primer-form-oculto/
回答
根据各种建议,我要做的就是:
隐藏表格:
Me.Opacity = 0 Me.ShowInTaskbar = false
显示表格:
Me.Opacity = 100 Me.ShowInTaskbar = true
回答
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainUIForm mainUiForm = new MainUIForm(); mainUiForm.Visible = false; Application.Run(); }
回答
通常,只有在以后使用任务栏图标或者其他方法来显示表单时,我们才这样做,但是即使我们从不显示主表单,它也可以很好地工作。
在Form类中创建一个默认为false的布尔值:
private bool allowshowdisplay = false;
然后重写SetVisibleCore方法
protected override void SetVisibleCore(bool value) { base.SetVisibleCore(allowshowdisplay ? value : allowshowdisplay); }
因为Application.Run()会在加载表单后设置表单.Visible = true,所以它将拦截该表单并将其设置为false。在上述情况下,它将始终设置为false,直到通过将allowhowdisplay设置为true启用它为止。
现在,将使表单无法在启动时显示,现在,我们需要通过设置allowhowdisplay = true来重新启用SetVisibleCore以使其正常运行。我们将需要在显示表单的任何用户界面功能上执行此操作。在我的示例中,这是我notiyicon对象中的左击事件:
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { this.allowshowdisplay = true; this.Visible = !this.Visible; } }