2013-02-28 236 views
4

有没有办法将快捷键分配给BindingNavigator中的标准导航ToolStrip项目?如何将快捷键分配给bindingNavigator上的按钮?

是开始使用.AddStandardItems方法添加的项目是不具有ShortcutKeys属性类型的ToolStripItem的。

我试图转换到ToolStripMenuItem,但它失败。

public void ConfigureMyNavigator() 
    { 
       // Adds ToolStripItems which don't support shortcut keys   
       m_navigator.AddStandardItems(); 

       // Adds a ToolStripMenuItem which can support a shortcut key 
       var button = new ToolStripMenuItem 
       { 
        Size = new Size(0, 0), 
        Text = "Save", 
        ShortcutKeys = (Keys)Shortcut.CtrlS, 
        ToolTipText = "Press Ctrl+S to save" 
       }; 
       button.Click += tsmi_Click; 

       m_navigator.Items.Add(button); 

       // This fails with invalid cast exception 
       ((ToolStripMenuItem)m_navigator.Items[1]).ShortcutKeys = (Keys)Shortcut.AltLeftArrow; 


    } 

我想我可以用toolstripmenuitems一个接一个地替换toolstripitems,但是感觉这很尴尬。

回答

8

您可以监听键命令,然后提升相应的ToolStripButton的点击。重写ProcessCmdKey方法在你的表单代码:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    switch (keyData) 
    { 
     case (Keys.Alt | Keys.Left): 
      m_navigator.Items[1].PerformClick(); 
      break; 
     case (Keys.Alt | Keys.Right): 
      m_navigator.Items[6].PerformClick(); 
      break; 
    } 

    return base.ProcessCmdKey(ref msg, keyData); 
} 
+0

耶!谢谢! – 2013-03-09 04:25:10

0

可以重写AddStandardItems方法和重载ToolStripMenuItem的构造函数接受的ToolStripItem为更容易创建项目的参数。

但它仍然有点“一个接一个地取代物品”。

+0

有没有办法覆盖AddStandardItems和仍然保留的位置文本的工作方式?目前我不知道如何重写比单纯调用AddStandardItems更好 - 并逐个添加按钮。在覆盖AddStandardItems,我需要知道如何连接的按钮到的事件,在那里得到的图标,以及如何使记录号文的工作方式相同 – 2013-03-03 19:03:01

+0

它可能是没有任何好转,这只是重复使用 – Matus 2013-03-03 21:19:16

2

你尝试在按钮标题前加上“&”的象征?

文本=“&保存”

+0

嗨Ankit。好主意,但我想要的其他键不是Alt。 – 2014-04-28 21:00:39

相关问题