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);
}
}
}
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);
}
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
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