DotNet · 2022年5月15日

DataGridView按回车换列跳到同行下一单元格,而不是下一行

DataGridView按回车换列-同行下一单元格

如果你想通过

KeyPress,KeyDown,KeyUp事件达到目的,是没什么反应的,因为Enter事件会被DataGridView控件优先处理成换到下一行

在DataGridView中按下回车跳到同行下一单元格的解决方案

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using System.Reflection;
namespace
MasterSoft.WinUI
{
    ///
<summary>

    ///
输入回车光标跳到同行下一单元格的DataGridView

    /// Tony Wu
    /// www.mastercn.net
    /// </summary>
    public class
MDataGridView :
DataGridView
    {
        protected overridebool ProcessDialogKey(Keys
keyData)
        {
            //如果按键是回车键的话,则按Tab键来处理
            if ((keyData &
Keys.KeyCode) ==
Keys.Enter)
            {
                return this.ProcessTabKey(keyData);
            }
            return base.ProcessDialogKey(keyData);
        }
        protected overridebool ProcessDataGridViewKey(KeyEventArgs
e)
        {
            //如果按键是回车键的话,则按Tab键来处理
            if (e.KeyCode ==
Keys.Enter)
            {
                return this.ProcessTabKey(e.KeyCode);
            }
            return base.ProcessDataGridViewKey(e);
        }
    }
}

第二种方法——————

 

protected override bool ProcessCmdKey(ref Message msg, Keys
keyData) 

if (keyData ==
Keys.Enter) 

System.Windows.Forms.SendKeys.Send(“{tab}”); 
returntrue

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

用上面这个改写datagridview控件,或按键事件中写。总之,解决的方法就是把回车事件改成其他事件,

vb.net的版本 

Public Class
MyDataGrid  
          Inherits
DataGrid 

          Protected Overrides Function
ProcessCmdKey(ByRef msg As System.Windows.Forms.Message,
keyData As System.Windows.Forms.Keys) As Boolean 
 
               If msg.WParam.ToInt32() = CInt(Keys.Enter) Then 
 
                    SendKeys.Send(“{Tab}”
 
                    Return True 
 
               End If 
 
               Return MyBase.ProcessCmdKey(msg,
keyData) 
 
          End Function ‘ProcessCmdKey

 

最新电影,电视剧,尽在午夜剧场

电影电视剧午夜不寂寞