业务单据窗口,设计的有一些按钮(不是菜单),如保存,修改,删除;
希望可以按下CTRL+S组合键来实现保存的功能,接F2实现修改功能,等等!
这个功能如何实现? 我找了半天也没有找到这个功能!
先在这儿谢谢大家了!

解决方案 »

  1.   

    按扭无法设置,我以前用过一个方法,就是隐形菜单来做,就是用做一个右键菜单,然后把visible设为false,然后再设置快捷键,在菜单的点击事件里调用按扭事件
      

  2.   

    private void Form1_KeyDown(object sender, KeyEventArgs e)
            {
                if(e.Control && e.KeyCode == Keys.S)
                    MessageBox.Show("你按了CTRL和S键");
            }
      

  3.   

    不怕麻烦,就自定义快捷键好了
    Public enum KeyModifiers{None=0,Alt=1,Control=2,Shift=4,Windows=8}
    //注册系统热键:
    [DllImport(“user32.dll”,SetLastError=true)] public static extern bool RegisterHotKey(
      IntPtr hwnd, int id, KeyModifiers fsModifiers,
      Keys vk
    );
    //释放:
      [DllImport(“user32.dll”,SetLastError=true)] public static extern bool UnregisterHotKey(IntPtr hwnd,int id);
    //定义快捷键(ctrl+S):
      Bool success=RegisterHotKey(Handle,100,KeyModifiers.Control,Keys.S);
    Protected override void WndProc(ref Message m)
    { const int WM_HOTKEY=0x0312;
      If(m.Msg==WM_HOTKEY)
        {ProcessHotKey(); //热键处理程序,连到button.click就可以了
    }
       Base.WndProc(ref m);
    }
      

  4.   

    还有简单一点的方法吗?
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
       if(e.Control && e.KeyCode == Keys.S)
       button1_click(?,?)   //问号的地方应该如何填啊?
    }调用的时候如何调用啊?private void button1_click(object sender, KeyEventArgs e)
    {
         MessageBox.Show("保存");}
      

  5.   

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
       if(e.Control && e.KeyCode == Keys.S)
       button1_click(button1,EventArgs.Empty)   //问号的地方应该如何填啊?
    }
      

  6.   

    把form的keypriview设成true,再在form的事件中作处理不行么?
      

  7.   

    楼上的朋友:----------------------------------------------------------
    把form的keypriview设成true,再在form的事件中作处理不行么?
    ----------------------------------------------------------
    您讲的这种方法应该如何去做?
      

  8.   

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
       if(e.Control && e.KeyCode == Keys.S)
       button1_click(?,?)   //问号的地方应该如何填啊?
    }调用的时候如何调用啊?private void button1_click(object sender, KeyEventArgs e)
    {
        private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
       if(e.Control && e.KeyCode == Keys.S)
       Function();//问号的地方应该如何填啊?
    }调用的时候如何调用啊?private void button1_click(object sender, KeyEventArgs e)
    {
         Function();}private void  Function()
    {
      MessageBox.Show("保存");
    }
    }
      

  9.   

    protected override bool ProcessDialogKey(Keys keyData)
    {
    int altKey = Keys.Alt.GetHashCode(); if(keyData==Keys.F1)
    {
    this.SelectAll(true);
    return true;
    }
    if(keyData==Keys.F2)
    {
    this.SelectAll(false);
    return true;
    }
    if(keyData.GetHashCode() == altKey + Keys.S.GetHashCode())
    {
    if(this.Save() == 0) 
    {
    this.Print();
    }
    return true;
    }
    if(keyData.GetHashCode() == altKey + Keys.Q.GetHashCode())
    {
    this.Query();
    return true;
    }
    if(keyData.GetHashCode() == altKey + Keys.P.GetHashCode())
    {
    //
    return true;
    }
    if(keyData.GetHashCode() == altKey + Keys.X.GetHashCode())
    {
    this.Close();
    return true;
    }

    return base.ProcessDialogKey (keyData);
    }
      

  10.   

    button的label设置为  文件(&F) --Alt+FCTRL+S组合键来实现保存的功能,接F2实现这样只有写代码了