Приложение C # состоит из значка панели задач (NotifyIcon) и скрытого окна служебных данных.Я хочу, чтобы пользователь мог переключать видимость окна, нажимая на NotifyIcon (слева, один клик).Также окно скрывается при потере фокуса.
Это то, что у меня есть, подкласс System.Windows.Forms.Form
:
Инициализация:
this.ControlBox = false;
this.ShowIcon = false;
this.ShowInTaskbar = false;
// Instance variables: bool allowVisible;
// System.Windows.Forms.NotifyIcon notifyIcon;
this.allowVisible = false;
this.notifyIcon = new NotifyIcon();
this.notifyIcon.MouseUp += new MouseEventHandler(NotifyIconClicked);
this.Deactivate += new EventHandler(HideOnEvent);
Методы экземпляра:
private void NotifyIconClicked(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
if (this.Visible)
this.Hide();
else
this.Show();
}
}
new public void Show()
{
this.allowVisible = true;
this.Visible = true;
this.Activate();
}
new public void Hide()
{
this.allowVisible = false;
this.Visible = false;
}
private void HideOnEvent(object sender, EventArgs e)
{
this.Hide();
}
protected override void SetVisibleCore(bool visible)
{
base.SetVisibleCore(this.allowVisible ? visible : this.allowVisible);
}
Нажатие на значок открывает окно, как и должно быть.Но повторное нажатие на него скрывает его до тех пор, пока на нем нажата мышь, а затем сбрасывает его на видимое.
Я предполагаю, что событие нажатия мыши крадет фокус из окна, поэтому оно исчезает.Затем вызывается событие «вверх» мыши, показывающее окно как скрытое.
Моя следующая идея состояла в том, чтобы прочитать видимость окна при событии «мыши вниз», поэтому я протестировал три события и зарегистрировал время UNIX по мере их вызова.:
notifyIcon.MouseDown
notifyIcon.MouseUp
this.LostFocus
Результат довольно странный: допустим, окно видно.Это происходит, когда я нажимаю на иконку: «Фокус потерян» вызывается немедленно.Mouse down называется , как только я отпускаю мышь , прямо перед событием mouse up.
1312372231 focus lost
1312372235 mouse down
1312372235 mouse up
Почему задерживается событие mouse down *
Как можноЯ переключаю окно?