启动时C#Hide(),没有ShowInTaskbar为false

时间:2010-12-09 13:25:36

标签: .net c#-3.0 hide startup hotkeys

我正在尝试使用热键创建一个应用程序,并选择在任务栏托盘中启动。

现在的问题是,在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;
}

在此代码之后,热键被禁用。

2 个答案:

答案 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()方法才会运行。因此,将您所获得的任何代码移到此覆盖中。