A set of .NET Framework managed libraries for developing graphical user interfaces.
Just check if the tab key and shift key are pressed
private const int
VK_TAB = 0x09,
VK_SHIFT = 0x10;
private const short
KEY_PRESSED = 0x80;
[DllImport("USER32.dll")]
private static extern short GetKeyState(int nVirtKey);
private static bool IsKeyPressed(int nVirtKey) {
return (GetKeyState(nVirtKey) & KEY_PRESSED) == KEY_PRESSED;
}
protected override void OnEnter(EventArgs e) {
if (RowCount == 0) {
TryAddRow();
}
if (!inGotoNextControl) {
if (FirstRowIndex >= 0 && FirstColumnIndex >= 0) {
bool tab = IsKeyPressed(VK_TAB);
bool shift = IsKeyPressed(VK_SHIFT);
if ((tab && !shift) || CurrentCell == null) {
BeginInvoke((Action)(() => {
CurrentCell = Rows[FirstRowIndex].Cells[FirstColumnIndex];
}));
}
else if (tab && shift) {
BeginInvoke((Action)(() => {
CurrentCell = Rows[LastRowIndex].Cells[FirstColumnIndex];
}));
}
}
}
base.OnEnter(e);
}
protected int FirstColumnIndex {
get {
if (FirstVisibleColumn != null) {
return FirstVisibleColumn.Index;
}
return -1;
}
}
protected DataGridViewColumn FirstVisibleColumn {
get {
return Columns.GetFirstColumn(
DataGridViewElementStates.Visible,
DataGridViewElementStates.None);
}
}
protected int FirstRowIndex {
get {
return Rows.GetFirstRow(DataGridViewElementStates.Visible);
}
}
protected int LastRowIndex {
get {
return Rows.GetLastRow(DataGridViewElementStates.Visible);
}
}