如何同时检测 “鼠标单击信息和键盘按键信息”?

soldier_shen 2006-10-29 09:40:39
我需要实现这样的功能:
在窗体上有一排按钮,我希望做到,

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事件,奇怪了。

始终不能实现,象在文件夹里选文件那样自由地选折按钮。

分实在少了点,抱歉啊,有兴趣发表一下高见吧!
...全文
223 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmallMummy 2006-10-30
  • 打赏
  • 举报
回复
mark
www_123du_com 2006-10-30
  • 打赏
  • 举报
回复
参数object sender就是被单击的按钮。
soldier_shen 2006-10-30
  • 打赏
  • 举报
回复
真是的,FantasiaX(阿猛)的分忘给了,一定补上!
soldier_shen 2006-10-30
  • 打赏
  • 举报
回复
很高兴,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;
}
}
}
}
}
Timothy Liu 2006-10-30
  • 打赏
  • 举报
回复
兄弟,解决问题的方向错了:)
这个要用到窗体的静态属性ModifierKeys
给你个核心代码——
private void button1_Click(object sender, EventArgs e)
{
if (Form1.ModifierKeys == Keys.Control)
{
textBox1.Text = "按下了Control";
}
}
蓝色幽明 2006-10-29
  • 打赏
  • 举报
回复
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)
就可以了

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧