2017-03-16 43 views
1

我有一个MenuStrip,我使用下面的代码使之AutoHide。它隐藏/显示知府但是当一个控制获得焦点,按Alt键键,MenuStrip节目,但它不活跃,没有下下“F”文件的快捷键,例如小下划线,并按下“F”会不打开它)。我如何正确地激活它?Autohide MenuStrip - 如何在显示时激活它?

注:我用MenuDeactivate代替它,但它并没有知府工作。

bool menuBarIsHide = true; 
bool altKeyIsDown = false; 
bool alwaysShowMenuBar=false; 
//KeyPreview is true; 
//for prevent glitch(open/close rapidly) 
void Form1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if ((Control.ModifierKeys & Keys.Alt) != 0) 
     altKeyIsDown = false; 
} 
void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if ((Control.ModifierKeys & Keys.Alt) != 0) 
    { 
     if (altKeyIsDown) 
      return; 
     if (!alwaysShowMenuBar) 
     { 
      if (menuBarIsHide) 
      { 
       menuBar.Show(); 
       menuBarIsHide = false; 
       //manage container height 
      } 
      else 
      { 
       menuBar.Hide(); 
       menuBarIsHide = true; 
       //manage container height 
      } 
     } 
    } 
} 

回答

1

您可以覆盖ProcessCmdKey处理Alt键键切换菜单的知名度。也要激活菜单,请致电MenuStrip的内部OnMenuKey方法。也处理MenuDeactivate使菜单看不见与菜单完成你的工作后,但你需要使用BeginInvoke菜单看不见。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == (Keys.Alt | Keys.Menu)) 
    { 
     if (!this.menuStrip1.Visible) 
     { 
      this.menuStrip1.Visible = true; 
      var OnMenuKey = menuStrip1.GetType().GetMethod("OnMenuKey", 
       System.Reflection.BindingFlags.NonPublic | 
       System.Reflection.BindingFlags.Instance); 
      OnMenuKey.Invoke(this.menuStrip1, null); 
     } 
     else 
     { 
      this.menuStrip1.Visible = false; 
     } 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
private void menuStrip1_MenuDeactivate(object sender, EventArgs e) 
{ 
    this.BeginInvoke(new Action(() => { this.menuStrip1.Visible = false; })); 
} 
+0

让我知道如果您有任何关于应用该解决方案的问题。请记住,开始时应将'MenuStrip'的'Visible'属性设置为'false'。这是我知道的最稳定的自动隐藏菜单。 –

+0

感谢您的回复,但存在问题。如果用户按住'Alt'键'menuStrip'就会快速打开和关闭。我应该如何解决这个问题? – NokhodSiah

+0

不客气@NokhodSiah处理关键事件时,它的默认行为。我会检查它,如果我有任何问题,我会分享一个解决方案:) –

相关问题