私は奇妙な問題があります。 WinFormsアプリでは、私は、コードが正常に動作しますが、私は、問題が移動する機能を実装して抱えている私は、矢印キーでそれの内側に移動するためのいくつかのコードを実装するDataGridViewを持っており、キーを入力してください...Datagridview内で押されたTabのコードからwinformsの次のコントロールを選択する方法
class CalibDataGridView : System.Windows.Forms.DataGridView
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
int row = 0;
int col = 0;
// return base.ProcessCmdKey(ref msg, keyData);
switch (keyData)
{
case Keys.Down:
return true;
case Keys.Up:
return true;
case Keys.Right:
row = this.CurrentCell.RowIndex;
col = this.CurrentCell.ColumnIndex;
while (true)
{
col++;
if (col == this.Columns.Count)
{
row++;
col = 0;
}
if (row == this.Rows.Count)
{
col = 0;
row = 0;
}
if (!this[col, row].ReadOnly && this[col, row].Visible) break;
}
this.CurrentCell = this[col, row];
return true;
case Keys.Left:
row = this.CurrentCell.RowIndex;
col = this.CurrentCell.ColumnIndex;
while (true)
{
col--;
if (col < 0)
{
row--;
col = this.Columns.Count - 1;
}
if (row < 0)
{
row = this.Rows.Count - 1;
col = this.Columns.Count - 1;
}
if (!this[col, row].ReadOnly && this[col, row].Visible) break;
}
this.CurrentCell = this[col, row];
return true;
case Keys.Enter:
row = this.CurrentCell.RowIndex;
col = this.CurrentCell.ColumnIndex;
while (true)
{
row++;
if (row == this.Rows.Count)
{
row = 0;
}
if (!this[col, row].ReadOnly && this[col, row].Visible) break;
}
this.CurrentCell = this[col, row];
return true;
default:
return base.ProcessCmdKey(ref msg, keyData);
}
}
}
TABキーが押されたときの次の制御。私はDataGridViewののPreviewKeyDown機能にいくつかのコードを追加:
private void dgvRepeatability1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.PageDown && tbcMain.SelectedIndex > 0)
{
tbcMain.SelectedIndex--; //changes tab page
}
else if (e.KeyCode == Keys.PageUp && tbcMain.SelectedIndex < 7)
{
tbcMain.SelectedIndex++;
}
else if (e.KeyCode == Keys.Tab) //does not work like it should!!!!
{
Console.Beep(1000, 200);
this.SelectNextControl((Control)sender, true, true, true, true);
}
}
をこの最後のコードは奇妙な方法で動作します...どこかにそれはそう(それはビープ音を鳴らし必要があり、次の制御変更の背景色のような背景の変化に焦点が合って、それを契機に私はそれが焦点を当てていることがわかります)しかし、私は全体のフォームに焦点を失う...私はTabキーまたは矢印キーまたは他のキーを押すことができます何も起こりません....
私はフォームを最小化し、もう一度フォーカスを移動すると、最初のように次のコントロールに移動します。
また、.Select()と.Focus()でフォーカスを変更しても動作しませんでした。
ありがとうございました!
感謝を!それは実際に働いた。私は単にそれを変更することができます: e.Handled = true; this.SelectNextControl((Control)送信者、true、true、true、true); 問題はPreviewKeyDown機能にあったと思う... – Pajkec
ああ、それは私のために働くようには見えなかったが、私はあなたのためにやってうれしい。私は未来の読者のために私の答えを編集します – EpicKip
@Pajkecああ。それをテストし、私のために働くには、私はちょうど1価値false hahaを持っていたので、私は愚かなように感じます。 – EpicKip