protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.F1)
{
GetHelp(this.Text);
}
else
{
//处理热键
IEnumerable<HotKeyBinding> myhotKeyBindings = hotKeyBindings.Where(bind => bind.Keys.Equals(keyData));
if (myhotKeyBindings != null)
{
foreach (HotKeyBinding hotKeyBinding in myhotKeyBindings)
{
if (hotKeyBinding.Button is Control)
{
Control button = (Control)hotKeyBinding.Button;
if (button.Enabled && button.Visible)
{
hotKeyBinding.Button.PerformClick();
}
}
else
{
hotKeyBinding.Button.PerformClick();
}
}
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
private List<HotKeyBinding> hotKeyBindings = new List<HotKeyBinding>();
protected class HotKeyBinding
{
public Keys Keys { get; set; }
public IButtonControl Button { get; set; }
public HotKeyBinding(Keys keys, IButtonControl button)
{
Keys = keys;
Button = button;
}
}
/// <summary>
/// 添加快捷键绑定一次
/// </summary>
protected int AddHotKey(Keys keys, IButtonControl button)
{
hotKeyBindings.Add(new HotKeyBinding(keys, button));
return hotKeyBindings.Count;
}
/// <summary>
/// 解除快捷键绑定一次
/// Tip:解最后一个
/// </summary>
protected int RemoveHotKey(Keys keys, IButtonControl button)
{
HotKeyBinding hotKeyBinding = hotKeyBindings.LastOrDefault(bing => bing.Keys.Equals(keys) && bing.Button == button);
if (hotKeyBinding != null)
hotKeyBindings.Remove(hotKeyBinding);
return hotKeyBindings.Count;
}
/// <summary>
/// 解除某个快捷键的绑定(一次或全部)(默认清除全部)
/// Tip:如果清除一次,则清除最后一个
/// </summary>
protected int RemoveHotKey(Keys keys, bool isClearOrCutDown = true)
{
if (isClearOrCutDown)
{
hotKeyBindings.RemoveAll(bing => bing.Keys.Equals(keys));
return hotKeyBindings.Count;
}
else
{
HotKeyBinding hotKeyBinding = hotKeyBindings.LastOrDefault(bing => bing.Keys.Equals(keys));
if (hotKeyBinding != null)
hotKeyBindings.Remove(hotKeyBinding);
}
return hotKeyBindings.Count;
}
/// <summary>
/// 解除某个按钮的所有快捷键的绑定(一次或全部)(默认清除全部)
/// Tip:如果清除一次,则清除最后一个
/// </summary>
protected int RemoveHotKey(IButtonControl button, bool isClearOrCutDown = true)
{
if (isClearOrCutDown)
{
hotKeyBindings.RemoveAll(bing => bing.Button == button);
return hotKeyBindings.Count;
}
else
{
HotKeyBinding hotKeyBinding = hotKeyBindings.LastOrDefault(bing => bing.Button == button);
if (hotKeyBinding != null)
hotKeyBindings.Remove(hotKeyBinding);
}
return hotKeyBindings.Count;
}
/// <summary>
/// 是否存在相应的快捷键
/// </summary>
public bool inceptKey(Keys keys)
{
foreach (HotKeyBinding hkBind in hotKeyBindings)
{
if (hkBind.Keys.Equals(keys))
{
if (hkBind.Button is Control)
{
Control button = (Control)hkBind.Button;
if (button.Enabled && button.Visible)
{
return true;
}
else
{
continue;
}
}
else
{
return true;
}
}
}
return false;
}
protected void GetHelp(string _keyword)
{
string helpFile = "";
Process ps = System.Diagnostics.Process.GetCurrentProcess();
if (File.Exists(helpFile))
{
Help.ShowHelp(this, helpFile, HelpNavigator.KeywordIndex, _keyword);
}
else
{
MsgBox.Show(string.Format("找不到帮助文档,帮助文档是否存在!文件名:{0}", helpFile), "帮助文档缺失", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}