論壇問題

版面上有 100 個 textbox,編號為 1-100,textbox 排列為 1 欄 20 個,共 5 欄,當一開打這個 form 會將在第一欄第一列第一個 textbox 的背景顏色變更為黃色,然後可以透過鍵盤的 上、下、左、右來選取 textbox,當被選到的 textbox 背景顏色會為"黃色",沒有選到的會為灰色(預設)

拉 100 個 TextBox 實在是太瘋狂了,只利用 10 個 TextBox、5 欄來練習

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
public partial class frmTextBoxFcous : Form
{
    public frmTextBoxFcous()
    {
        InitializeComponent();
    }
 
    private void TextBoxFcous_Load(object sender, EventArgs e)
    {
        colorcontrol();
    }
 
    // override ProcessCmdKey 來進行鍵盤偵測
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        // 偵測方向鍵:上、下、左、右
        if (keyData == Keys.Left || keyData == Keys.Right || keyData == Keys.Up || keyData == Keys.Down)
        {
            // 利用上、下、左、右來判斷,
            // 上 -1
            // 下 +1
            // 左 -2
            // 右 +2
            int count = 0;
            switch (keyData)
            {
                case Keys.Up:
                    count--;
                    break;
                case Keys.Down:
                    count++;
                    break;
                case Keys.Left:
                    count -= 2;
                    break;
                case Keys.Right:
                    count += 2;
                    break;
            }
 
            // 利用 ActiveControl 來判斷 Focus 現在在哪個控件上
            string ActiveControlName = this.ActiveControl.Name;
            // Form 上的 TextBox 控件名稱,故意用 TextBox1 - TextBox10 來命名,用名稱來控制 Focus 應該往哪跳
            int ActiveControlLength = ActiveControlName.Length;
            string NextControlName = "TextBox" + (Convert.ToInt16(ActiveControlName.Substring(7, ActiveControlLength - 7)) + count).ToString();
 
            // 確認 TextBox 是否真的存在
            Control[] ctls = this.Controls.Find(NextControlName, false);
            if (ctls.Length != 0) this.Controls[NextControlName].Focus();
        }
 
        colorcontrol();
        return base.ProcessCmdKey(ref msg, keyData);
    }
 
    private void colorcontrol()
    {
        // 不管三七二十一,先把全部的 TextBox 背景變成灰色
        // 此語法只針對 TextBox 去掃
        foreach (TextBox txt in this.Controls.OfType<textbox>())
        {
            txt.BackColor = Color.Gray;
        }
 
        // Form 一開始執行時就必須變色,此時無法偵測 ActiveControl,
        // 此情況顯示 TextBox1,同時也把 TextBox1 的 Tab Order 設為 0
        if (this.ActiveControl == null)
        {
            textBox1.BackColor = Color.Yellow;
        }
        else
        {
            this.ActiveControl.BackColor = Color.Yellow;
        }
    }
}
 
張貼者: JengTing_政廷 標籤: C#-WinForm

[C#] 利用方向鍵移動 TextBox Focus的更多相关文章

  1. 歐洲國家拓展其移動和IT服務業務

    中興德國子公司與JOIN簽訂了一項綜合託管服務合同,在該合同中,公司將全面負責為盧森堡和比利時的JOIN核心網路提供網路運營,點對點無線網路報告,新品發佈和維護,還負責故障檢查.維修.測試和軟體升級. ...

  2. 移動電源ic的概述

    移動電源ic壹種集供電和充電功能於壹體的便攜式充電器,可以給手機等數碼設備隨時隨地充電或待機供電.壹般由鋰電芯或者幹電池作為儲電單元.區別於產品內部配置的電池,也叫外掛電池.壹般配備多種電源轉接頭, ...

  3. php 判定pc端與移動端

    1.親測有效 2.上代買 //判斷移動端,pc端 /*移动端判断*/ public static function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移 ...

  4. SHIFT(文字列の指定位置数の移動)

    文字ごとの項目内容の移動 以下のような SHIFT 命令のバリアントを使用すると.項目内容を移動することができます.SHIFT を使用すると.文字ごとに項目内容が移動します. 文字列の指定位置数の移動 ...

  5. jQuery 控制網頁捲軸移動 & Ignore link '#' method jump action

    $('a.gotoheader').click(function(){ // 讓捲軸移動到 0 的位置 $(); // ignore link "#" method return ...

  6. 巧妙利用ToArray()函数移除集合中的元素

    当我们对集合foreach遍历时,不能直接移除遍历的集合的元素,解决的方法有很多种,见我之前的随笔: http://www.cnblogs.com/527289276qq/p/4331000.html ...

  7. Android利用方向传感器获得手机的相对角度实例说明

    http://www.jb51.net/article/37710.htm 1.android 的坐标系是如何定义x, y z 轴的 x轴的方向是沿着屏幕的水平方向从左向右,如果手机不是正方形的话,较 ...

  8. 嵌入式开发之8127---DM8127如何利用EDMA搬移数据

    --------------qq:1327706646 ---------------------author:midu -------------------------------datetime ...

  9. 利用Unicode属性移除文本中的标点符号

    原文:http://bbs.csdn.net/topics/270033191   摘抄: str = str.replaceAll("[\\pP‘’“”]", "&qu ...

随机推荐

  1. C#窗体随意移动

    //全区域移动 const int WM_NCLBUTTONDOWN = 0xA1; const int HT_CAPTION = 0x2; [DllImport("user32.dll&q ...

  2. 解决IDEA中,maven依赖不自动补全的问题

    转载: 作者:七个榴莲链接:https://www.jianshu.com/p/46a423bdde31来源:简书 遇到的问题:Maven依赖不自动补全 在idea上使用maven插件时,发现在pom ...

  3. [转]一分钟明白 VS manifest 原理

    什么是vs 程序的manifest文件 manifest 是VS程序用来标明所依赖的side-by-side组建,如ATL, CRT等的清单. 为什么要有manifest文件 一台pc上,用一组建往往 ...

  4. 全栈之路-杂篇-前端Http请求封装优化

    在项目开发过程中,代码的封装是很有必要的,我觉得这是程序员进阶的一个重要的技能,不会封装代码,你的代码看起来乱的一批,基本上不能维护,像一次性塑料袋一样,用完一次就失去了价值,这同时也会无缘无故的增加 ...

  5. noi.openjudge 二分法求函数的零点

    二分法求函数的零点 总时间限制: 1000ms 内存限制: 65536kB 描述 有函数:f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121 已 ...

  6. redis-cli启动问题

    首先需要找到redis的所在目录,然后将redis.conf复制到/etc/redis.conf 另外需要将redis.conf文件中的 daemonize no 设置为 daemonize yes. ...

  7. SPSS分析技术:CMH检验(分层卡方检验);辛普森悖论,数据分析的谬误

    SPSS分析技术:CMH检验(分层卡方检验):辛普森悖论,数据分析的谬误 只涉及两个分类变量的卡方检验有些时候是很局限的,因为混杂因素总是存在,如果不考虑混杂因素,得出的分析结论很可能是谬误的,这就是 ...

  8. Angular-cli 的安装

    一.先安装node.js(若已经安装就跳过) 1.下载node.js安装包 http://nodejs.cn 按照自己电脑的配置,下载相应的安装包(我下载的是 node-v6.10.3-x64.msi ...

  9. PAT甲级——A1059 Prime Factors

    Given any positive integer N, you are supposed to find all of its prime factors, and write them in t ...

  10. java基础之异常。

    异常: (1)异常:异常就是Java程序在运行过程中出现的错误. 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象.其实就是Java对不正常情况进行描述后 ...