首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动隐藏MenuStrip

自动隐藏MenuStrip
EN

Stack Overflow用户
提问于 2016-06-01 21:23:47
回答 1查看 3.4K关注 0票数 1

我正在处理一个Windows项目,最近我添加了一些代码,在默认情况下将MenuStrip隐藏起来,除非用户按Alt键,以符合最新版本的Windows可视化实践。

我想要做的是完成这个添加,使MenuStrip能够自动隐藏,如果在特定的时间框架内没有检测到活动。下面是我迄今起草的代码:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SomeWinformProject {
    public partial class MainForm : Form {
        /* Construction */
        public MainForm () {
            InitializeComponent ();
            this.KeyDown += new KeyEventHandler(this.MainForm_KeyDown);
            this.KeyPreview = true;
            this.menuStrip.Visible = false;
        }

        /* Alt key event handler */
        private void MainForm_KeyDown (object sender, KeyEventArgs e) {
            /* if the Alt key is pressed and the menuStrip is not currently
             * visible, un-hide it */
             if (e.Alt && !(this.menuStrip.Visible))
                 this.menuStrip.Visible = true;
        }
    }
}

为了解决这个问题,我想自己做些什么:

  1. 创建一个名为menuStripActivity效果的公共布尔值,并将其设置为MainForm_KeyDown()中的false。然后,我考虑在大约5秒的时间间隔内创建一个计时器实例,并将一个MouseClick事件附加到menuStrip。如果发生了MouseClick事件,那么menuStripActivity将被设置为true,而计时器中断将选择什么都不做,而不是隐藏MenuStrip。
  2. 我意识到上面存在的问题是,它没有考虑到用户正在做某事或导航menuStrip选项的可能性。我在MSDN文档中看到,也存在一个MouseHover事件处理程序,在这种情况下,当计时器跳转发生时,我可以或这两个处理程序的结果。

这两个方面的问题是,我对C#和整个.NET生态系统相当陌生,所以我不太清楚什么是正确的,什么是疯狂的。我希望避免我的代码被杂乱无章地从出发,并希望错误的一方的“最佳实践”为这种情况。

有人能帮我指出正确的方向(或者指出我正在犯的错误)吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-01 22:04:33

您可以收听MenuStrip.MenuDeactivate事件:

代码语言:javascript
复制
public MainForm () {
    InitializeComponent ();

    this.KeyPreview = true;
    this.KeyDown += new KeyEventHandler(this.MainForm_KeyDown);
    this.menuStrip.MenuDeactivate += (s, e) => this.menuStrip.Visible = false;

    this.menuStrip.Visible = false;
}

备注 当ALT键激活时,MenuStrip或ToolStrip通常既不从当前具有焦点的控件中提取焦点,也不移除焦点。如果有一个托管在MenuStrip中的控件或MenuStrip的下拉列表,则当用户按TAB键时,该控件将获得焦点。通常,当键盘激活GotFocus、LostFocus、Enter和Leave事件时,可能不会引发这些事件。在这种情况下,可以使用MenuActivate和MenuDeactivate事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37579022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档