代码之家  ›  专栏  ›  技术社区  ›  ehh

如何正确实施系统托盘注销操作

  •  0
  • ehh  · 技术社区  · 6 年前

    我已经创建了一个系统托盘应用程序,其中包含3个表单:

    • 登录表格
    • 历史表格。

    主窗体有一个Notifion,它具有ContextMenuStrip属性。

    this.PopupMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.Login,            
            this.Logout,
            this.History});
    this.MainFormNotifyIcon.ContextMenuStrip = this.PopupMenu;
    

    用户登录后,可以从弹出菜单中单击历史记录。

    如果用户打开了历史记录窗体并单击了注销,我想关闭历史记录并将主窗体以及系统托盘隐藏起来。

    由于可以直接从主窗体访问注销,因此隐藏主窗体不成问题。 但是,我想知道在用户注销的情况下,关闭历史记录窗体的正确方法是什么。

    为了做到这一点,我将主窗体作为对历史窗体的引用传递给了主窗体LoggedOutEvent:

    // Main Form
    public partial class MainForm : Form
    {
        public event EventHandler LoggingOutEvent;
        private HistoryForm _historyForm;
    
        private void ShowHistory_Click(object sender, EventArgs e)
        {
            _historyForm = new HistoryForm(this);
            _historyForm.Show();               
        }
    
        private void Logout_Click(object sender, EventArgs e)
        {
            if (LoggingOutEvent != null)
                LoggingOutEvent(null, null);
            Hide();
        }
    }
    
    // History Form
    public partial class HistoryForm : Form
    {
        public HistoryForm(MainForm form)
        {
            InitializeComponent();
            form.LoggingOutEvent += Form_LoggingOut;
        }
    
        private void Form_LoggingOut(object sender, EventArgs e)
        {
            Close();
        }
    }
    

    所以,我实现它的方式是传递主表单作为对历史表单的引用,以便订阅注销事件。如果History窗体将有一个按钮打开History Details窗体,那么我是否也必须将主窗体引用传递给它,并以类似的方式订阅LogoutEvent呢?

    0 回复  |  直到 6 年前