datagridview 按斷行符號鍵橫向移動問題

來源:互聯網
上載者:User

 我在作一個關於記件工資系統時候,datagridview 按斷行符號鍵預設是向下一行移動,操作文員為了輸入更快一點,需要按斷行符號鍵就橫向移動繼續輸入資料,其操作文員主要用右手操作鍵盤的數字鍵地區,每天輸入量大,所以必須要解決這個實際問題.

   我在網上搜尋了一些:

 private void dgv_jj_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
               
           
                MessageBox.Show("enter");
                SendKeys.Send("{TAB}");
                SendKeys.Send("{UP}");

            }
        }
            private void dgv_jj_KeyDown(object sender, KeyEventArgs e)
        {
        if  (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;

                SendKeys.Send("{TAB}");
            }

        }
等等關於datagridview鍵盤的事件都沒有反應!納悶,微軟既然設計了此事件為什麼沒有反映呢?網上也是千篇一律的這樣的代碼,那些人我懷疑跟本沒有編譯運行過,就在那揭貼!

   原來主要是因為快速鍵與菜單捷徑被稱為命令鍵,命令鍵也就始終比常規輸入鍵具有優先權。命令鍵的鍵盤響應已經被控制項封裝為protected型了。控制項編寫人員把多個預定義的鍵盤綁定方案封裝起來,稱為快速鍵。我們在Keydown/KeyPress中沒辦法攔截到Enter、SHIFT、CTRL 、ALT 鍵和其它一些鍵盤按鍵正是這個原因。為解決這些問題VS.NET給出了ProcessCmdKey 方法,我們可以通過重寫datagridview 的ProcessCmdKey方法來改變其命令索引值的相應事件 。

   後來,我還是在網上找到真正的揭貼代碼:重寫datagridview控制項相關事件.

整個類代碼:

using System;
using System.Collections.Generic;
using System.Text;

namespace MIS.Wage
{
    class mygridview : System.Windows.Forms.DataGridView
    {
        protected override void OnKeyUp(System.Windows.Forms.KeyEventArgs e)
        {

            if (e.KeyCode == System.Windows.Forms.Keys.Enter)
            {

                e.Handled = true;
                // MessageBox.Show("enter");
               // System.Windows.Forms.SendKeys.Send("{TAB}");
                //System.Windows.Forms.SendKeys.Send("{UP}");

               // System.Windows.Forms.SendKeys.Send("{RIGHT}"); 
            }
        }

        protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
        {
            switch (keyData)
            {
                case System.Windows.Forms.Keys.Enter:
                    System.Windows.Forms.SendKeys.Send("{TAB}");
                  //  System.Windows.Forms.SendKeys.Send("{UP}");

                    return true;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

    }
}
編譯後,再在視窗設計地區工具箱裡直接拖出即可利用!我測試過,沒問題!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.