我正在尝试使用热键创建一个应用程序,并选择在任务栏托盘中启动。
现在的问题是,在load事件中使用this.Hide()
将不会产生任何影响。我可以添加this.ShowInTaskbar = false
,但在我再次设置为true后,为了显示窗口,它会自动禁用我的热键。
是否有其他方法可以在启动时隐藏我的表单,或者阻止我的热键取消注册?
隐藏表单的代码:
private void frmMain_Load(object sender, EventArgs e)
{
if (StartBG())
{
this.Hide();
this.ShowInTaskbar = false;
notifyIcon.Visible = true;
notifyIcon.ShowBalloonTip(3000, "Kore screenshots", "The application is started and will run on the background.", ToolTipIcon.Info);
}
}
在上面的代码之后,热键仍然有效,
private void showform()
{
this.Show();
this.ShowInTaskbar = true;
notifyIcon.Visible = false;
this.WindowState = FormWindowState.Normal;
}
在此代码之后,热键被禁用。
答案 0 :(得分:5)
我过去所做的是创建一个单独的表单,它始终最小化,ShowInTaskbar为false(因此它永远不会被用户看到),并且此表单拥有NotyifyIcon。
然后,我想要显示的任何UI,我开发为单独的表单,我根据需要显示/隐藏。我发现这比试图获得一个可能在taskabr /拥有一个通知图标中显示/隐藏/显示的表单更干净。
答案 1 :(得分:4)
防止表单可见但仍然创建其Handle以便通知图标工作需要重写SetVisibleCore()。像这样:
protected override void SetVisibleCore(bool value) {
if (value && !this.IsHandleCreated) {
value = false;
CreateHandle();
// Put your Load event code here
//...
}
base.SetVisibleCore(value);
}
请注意,在事件实际可见之后,Load事件或OnLoad()方法才会运行。因此,将您所获得的任何代码移到此覆盖中。