我正在尝试制作一个隐藏的桌面应用程序,但只会在一段时间后显示。我试图在窗口加载事件中设置Visible = false但它仍然显示。
答案 0 :(得分:8)
Visforms属性在Winforms中是一个大问题,将其设置为true是导致创建本机Windows窗口的原因。其中一个副作用是在OnLoad方法或Load事件中将其设置为false不起作用。关于Hide()没什么特别的,它只是将Visible设置为false,因此也不起作用。
重写SetVisibleCore()是一种方法。然而,重要的是您仍然可以创建本机窗口。否则你不能关闭()表格。看起来像这样:
protected override void SetVisibleCore(bool value) {
if (!IsHandleCreated && value) {
value = false;
CreateHandle();
}
base.SetVisibleCore(value);
}
您现在可以调用Show()或设置Visible = true以使窗口随时可见。并且即使您从未将其显示,也请调用Close()。这是使用仅通过上下文菜单显示的弹出窗口实现NotifyIcon的好方法。
请注意,这有副作用,OnLoad()方法和Load事件直到第一次实际可见时才会运行。您可能需要移动代码。
答案 1 :(得分:3)
你也可以试试这个..
public partial class Form1 : Form
{
public delegate void myHidingDelegate();
public Form1()
{
InitializeComponent();
myHidingDelegate dlg = new myHidingDelegate(mymethodcall);
dlg.BeginInvoke(null, null);
}
public void mymethodcall()
{
myHidingDelegate dlg1 = new myHidingDelegate(HideForm);
this.Invoke(dlg1);
}
public void HideForm()
{ this.Hide(); }
}
唯一的问题是:表格闪烁片刻并消失
答案 2 :(得分:2)
对于WinForms应用程序,我发现控制启动可见性的最简单方法是覆盖SetVisbileCore方法。
这是一个简单的例子,表格将在5秒后显示
using System;
using System.Windows.Forms;
namespace DelayedShow
{
public partial class Form1 : Form
{
private bool _canShow = false;
private Timer _timer;
public Form1()
{
InitializeComponent();
_timer = new Timer();
_timer.Interval = 5000;
_timer.Tick += new EventHandler(timer_Tick);
_timer.Enabled = true;
}
void timer_Tick(object sender, EventArgs e)
{
_canShow = true;
Visible = true;
}
protected override void SetVisibleCore(bool value)
{
if (_canShow)
{
base.SetVisibleCore(value);
}
else
{
base.SetVisibleCore(false);
}
}
}
}
答案 3 :(得分:1)
您是否尝试this.Hide()
代替Visible = false
?
另一个选项可以是启动应用程序而不在其中传递任何表单对象。
Application.Run();
等待一段时间(使用Timer
),然后打开表单。
答案 4 :(得分:0)
在Main
方法中,使用Application.Run()
代替Application.Run(new Form1())
。然后稍后使用new Form1()
和form1.Show()
。
答案 5 :(得分:0)
将C#应用程序放在系统托盘中
提示:如果您有BMP文件 想要转换为图标文件,我 强烈推荐QTam Bitmap 图标3.5应用程序。
- 为表单的Resize事件添加事件处理程序,该事件将在应用程序最小化时隐藏它。这样,它就不会出现在任务栏上。
private void Form1_Resize(object sender, System.EventArgs e)
{
if (FormWindowState.Minimized == WindowState)
Hide();
}
- 为NotifyIcon.DoubleClick事件添加事件处理程序,并按如下方式对其进行编码,以便在双击图标时恢复应用程序。
private void notifyIcon1_DoubleClick(object sender,
System.EventArgs e)
{
Show();
WindowState = FormWindowState.Normal;
}