我需要实现这样的功能:
    在窗体上有一排按钮,我希望做到,   1、仅单击:仅让被单击的按钮的foreColor变成红色,其他按钮的ForeColor变成黑色。   2、ctrl+单击: 
      if(it is not red)
      { 将其变为红色,增加foreColor为红色的按钮;}
      else
      { 将其变为黑色,减少foreColor为红色的按钮;}问题就这么简单,不过我始终找不到合适的windows事件来处理。1、private void btn_dlfj1_Click(object sender, EventArgs e)
        {
        }
  似乎在该参数e里找不到关于键盘的检测信息,2、我用keyup和keydown联合处理,发现并不能检测到按键的up信号。
   private void btn_dlfj1_KeyDown(object sender, KeyEventArgs e)
        {
        }
        private void btn_dlfj1_KeyUp(object sender, KeyEventArgs e)
        {
        }
在我的ctrl键保持按下的状态时,连续执行KeyDown过程,在松开键时,却没有出发up事件,奇怪了。始终不能实现,象在文件夹里选文件那样自由地选折按钮。分实在少了点,抱歉啊,有兴趣发表一下高见吧!

解决方案 »

  1.   

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
              if (keyData == [Keys.YourKey])
              {
                     [Your Event];
               }
              return base.ProcessCmdKey (ref msg, keyData);
    }
    [Keys.YourKey]就是你的按键。假如你的按键是a的话就是Keys.a。
    [Your Event]就是你要触发的事件了。假如你要触发一个button1按钮的单击事件的话就写button1_Click(this,null)
    就可以了
      

  2.   

    兄弟,解决问题的方向错了:)
    这个要用到窗体的静态属性ModifierKeys
    给你个核心代码——
    private void button1_Click(object sender, EventArgs e)
    {
    if (Form1.ModifierKeys == Keys.Control)
    {
    textBox1.Text = "按下了Control";
    }
    }
      

  3.   

    参数object sender就是被单击的按钮。
      

  4.   

    很高兴,FantasiaX(阿猛)给出了最关键的的静态属性ModifierKeys,这就是我想要的。我已经经过测试,完全实现了预定目标,我的简单测试代码如下:对各位的支持表示感谢!
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace 同时接受单击事件和键盘按键事件
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }    //所有的按钮都使用该过程作为其代理
            private void button1_Click(object sender, EventArgs e)
            {
                if (Form1.ModifierKeys == Keys.Control)
                {
                    if(((Button)(sender)).ForeColor == Color.Black)
                       {
                         ((Button)(sender)).ForeColor = Color.Red;
                       }
                   else
                      {            
                      ((Button)(sender)).ForeColor = Color.Black;
                      }
                }
            }
        }
    }
      

  5.   

    真是的,FantasiaX(阿猛)的分忘给了,一定补上!