Ctrl-A全选这点事(C#,WinForm)

所有的文本框,不管单行多行都Ctrl-A全选就好了吧?是啊,很方便。Windows的软件基本都是这样。可为什么我们自己制作的WinForm就默认不是这样呢?谁知道呢,可能是WinForm饱受诟病,要改变一下,不想再封装太多默认功能吧。反正程序员自己加这点功能也不难。

好了,以上是YY。接下来正式开始。

一开始,我在自己的WinForm的某个文本框内按Ctrl-A,它没有全选,而且发出“噔”一声,提醒我按了一个无效的按键。于是很简单的,加了以下代码,实现了“这一个”文本框的Ctrl-A实现全选功能。

private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    TextBox textBox = sender as TextBox;
    if (textBox == null)
        return;
    if (e.KeyChar == (char)1)       // Ctrl-A 相当于输入了AscII=1的控制字符
    {
        textBox.SelectAll();
        e.Handled = true;      // 不再发出“噔”的声音
    }
}

并由属性编辑器或自己在代码中实现了事件的注册: textBox.KeyPress += TextBox_KeyPress;

这样就完事了,真是“这点事”。等等,如果我有30个TextBox不是要写30行注册代码?能不能写个什么一次搞定,整个WinForm内的所有TextBox都支持Ctrl-A,最好连动态加载的TextBox也支持。于是我在Form的ControlAdded事件中判断如果新添加的Control是TextBox则注册KeyPress事件处理方法。

private void Control_ControlAdded(object sender, ControlEventArgs e)
{
    TextBox textBox = e.Control as TextBox;
    if (textBox != null)
    {
        textBox.KeyPress += TextBox_KeyPress;
    }
}
public Form1()
{
    this.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.Control_ControlAdded);
    InitializeComponent();
}

代码运行后,发现部分TextBox有效果,部分没效果。经过调试,发现,直接跟在WinForm(Form1)的有效果,在用户控件(UserControl)中的TextBox则无效果。对照一下代码,是啊,我还应该处理UserControl的ControlAdded事件,哦不,是所有Control的ControlAdded事件。而且控件还会包含控件,所有子子孙孙控件都注册这个事件,这样任何新添加的控件都会被判断是否为TextBox,于是Control_ControlAdded变成这个样子:

private void Control_ControlAdded(object sender, ControlEventArgs e)
{
    e.Control.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.Control_ControlAdded);
    foreach (Control c in e.Control.Controls)
    {
        Control_ControlAdded(sender, new ControlEventArgs(c));
    }
    TextBox textBox = e.Control as TextBox;
    if (textBox != null)
    {
        textBox.KeyPress += TextBox_KeyPress;
    }
}

经测试,通过。一劳永逸地解决了这个问题,从此不再为这个问题而费神。

时间: 2024-11-02 14:01:13

Ctrl-A全选这点事(C#,WinForm)的相关文章

全选/取消全选那点事

今天我花了半天时间处理checkbox全选/取消全选那点事 技术领域 可信计算 其他   全选 申请日 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016  年  至 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 至今 年 专利类型 发明专利 实用新型   全选 授权

C# TextBox Ctrl+A全选

在TextBox控件中使用快捷键,一般要求按下快捷键立刻产生效果,KeyUp事件显然不符合我们的要求,而KeyPress事件中不支持使用组合件,所以我们选用KeyDown事件,具体代码实现如下: private void tBBefore_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.A) { ((TextBox)sender).SelectAll(); } }

Edit Control响应全选(Ctrl+A)

MFC中的Edit控件用于输入数据,当输入的数据为大段数字的时候,全选功能就显得非常重要了,可偏偏在MFC中Edit控件就不 支持全选.Ctrl+A不行,双击也不行. Ctrl+C和Ctrl+V都是默认支持的.因此为了使用方便,我们仅仅能自己让Edit去支持Ctrl+A全选 功能了. 实现的方式也比較简单,自己处理消息就是! Ctrl+A是一个组合消息,在检測到A或者a按键按下的时候.推断Ctrl键的状态,假设Ctrl键有效则说明用户按下了Ctrl+A按键,这时候我们将Edit中内容设置为全选就

PHP基础班初学心得:用JQ实现表单的全选、反选、取消和删除功能

摘要: 本人刚参加PHP基础班培训,由于之前毫无基础,分享的心得可能不规范,方法也许也"旁门左道",不能保证质量,只作自己总结学习,也希望能帮助到同样是初学者的朋友们,共同进步. 在这里分享一下我们基础班学员遇到的一些疑点和我的分析.PS:分析不一定正确,希望同行指教 前一段时间笔者重感冒了,身体不舒服,还请了一天假没去上实操课,播客也没有来得及和大家分享.今天感冒已经好得差不多啦,就剩下一点留鼻涕喉咙痒而已,刚好今天是休息天不用上课,这里打铁趁热,赶紧给大家分享一下昨天学到的用JQ实

C#文本框中默认是不允许使用全选的

C#文本框中默认是不允许使用全选的.可以通过以下事件完成: private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.A) textBox1.SelectAll(); } 这样,在文本框中输入ctrl+A时即可完成全选. 来自为知笔记(Wiz)

全选反选取消

http://www.mamicode.com/info-detail-1466046.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .edit-mode{ padding:10px; } .editing{ padding:10px;

变换文档主题风格+截图+全选文档+统一文档样式+删除空白页+书法字帖+稿纸格式

昨晚因为写博客结果把自己写兴奋了,都11点多了还困,然后有只猪就在那不停问我为啥这么兴奋,跟他说了原因还不信,真的好想打人,哼.算了,不跟这只猪计较了,谁让你是猪呢?猪毕竟可能听不懂人话,哈哈哈哈哈哈哈哈哈哈哈哈......不知道为什么,好怕猪看了后我会被打,O(∩_∩)O哈!毕竟我家猪头每天早上都叫我起床,这么暖的男朋友我还是不能吐槽太多的,今天早上打电话知道我还没起床跟我说了几句然后让我再睡会,恩,确实是要好好夸夸这个boy,猪头,有你真好!另外,上课........别走神了,飞机都快被你承

angular笔记_5(全选/反选)

全选和反选 BUG:当鼠标点击其中一个选项后,在点击全选按钮,该选项失效 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angul

【转】MFC 自定义edit 限制输入十六进制内容 响应复制粘贴全选剪切的功能

Ctrl组合键ASCII码 ^Z代表Ctrl+z                     ASCII值 控制字符  ASCII值 控制字符  ASCII值 控制字符  ASCII值 控制字符0(00)        NULL       8(08)        ^H         16(10)    ^P             24(18)    ^X1(01)         ^A           9(09)        ^I            17(11)    ^Q