C # Hide () при запуске, без ShowInTaskbar в false - PullRequest
4 голосов
/ 09 декабря 2010

Я пытаюсь создать приложение с горячими клавишами и возможностью запуска в панели задач.

Теперь проблема в том, что использование 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 ]

5 голосов
/ 09 декабря 2010

То, что я делал в прошлом, - это создание отдельной формы, которая всегда свернута и ShowInTaskbar ложна (поэтому она никогда не видна пользователю), и этой форме принадлежит NotyifyIcon.

Затем, любой пользовательский интерфейс, который я хочу отобразить, я разрабатываю как отдельные формы, которые я показываю / скрываю по мере необходимости. Я считаю, что это работает более чисто, чем попытка получить одну форму, которая может быть показана / скрыта / показана в taskabr / с уведомлением.

4 голосов
/ 09 декабря 2010

Чтобы форма не отображалась, но при этом создавался ее дескриптор, чтобы значок уведомлений работал, необходимо переопределить 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 () не будут запущены, пока форма не станет видимой позже.Поэтому переместите любой код, который вы получили, в это переопределение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...