将 Datagridview 文本框焦点移动到下一个而不是在条形码读取完成时向下移动
Move Datagridview text box focus to next and not down on barcode read complete
我正在使用条码扫描器。在简单的文本框中,我通过查找 Keys.Return 来处理 KeyPress 事件。这帮助我知道条形码读取已经完成。
但是在使用 datagridview 文本框时。条形码 reader 不在按键事件上发送 return 默认情况下,datagridview 在条形码读取后将光标向下移动 completion.I 想要将 datagridview 文本框的焦点移动到下一个单元格而不是向下。
我该如何处理?
我目前的实现如下:
private void dgvListItems_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
DataGridViewTextBoxColumn textBox = (DataGridViewTextBoxColumn)dgvMeterData.Columns["MeterId"];
if (dgvMeterData.CurrentCellAddress.X == textBox.DisplayIndex)
{
TextBox tb = e.Control as TextBox;
if (tb != null)
{
tb.KeyPress += tb_KeyPress;
}
}
}}
private void tb_KeyPress(object sender, KeyPressEventArgs e)
{
TextBox tb = sender as TextBox;
if (e.KeyChar==(char)Keys.Return)
{
tb.Text = tb.Text + e.KeyChar;
var columnIndex = dgvMeterData.CurrentRow.Cells["TestResults"].ColumnIndex;
var rowIndex = dgvMeterData.CurrentRow.Cells["TestResults"].RowIndex;
dgvMeterData.CurrentCell = (DataGridViewCell)dgvMeterData[columnIndex, rowIndex];
}
}
这帮助我做了几乎相同的事情。我希望你明白了。
private void dgvListItems_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewTextBoxEditingControl)
{
DataGridViewTextBoxEditingControl tb = e.Control as DataGridViewTextBoxEditingControl;
tb.PreviewKeyDown -= dgvListItems_PreviewKeyDown;
tb.PreviewKeyDown += dgvListItems_PreviewKeyDown;
}
}
private void dgvListItems_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyData == Keys.Return)
{
int columnIndex = dgvListItems.CurrentCell.ColumnIndex; ;
int rowIndex = dgvListItems.CurrentCell.RowIndex;
if (columnIndex == dgvListItems.Columns.Count - 1)
{
dgvListItems.CurrentCell = dgvListItems[0, rowIndex + 1];
}
else
{
dgvListItems.CurrentCell = dgvListItems[columnIndex + 1, rowIndex];
}
}
}
我正在使用条码扫描器。在简单的文本框中,我通过查找 Keys.Return 来处理 KeyPress 事件。这帮助我知道条形码读取已经完成。 但是在使用 datagridview 文本框时。条形码 reader 不在按键事件上发送 return 默认情况下,datagridview 在条形码读取后将光标向下移动 completion.I 想要将 datagridview 文本框的焦点移动到下一个单元格而不是向下。 我该如何处理? 我目前的实现如下:
private void dgvListItems_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
DataGridViewTextBoxColumn textBox = (DataGridViewTextBoxColumn)dgvMeterData.Columns["MeterId"];
if (dgvMeterData.CurrentCellAddress.X == textBox.DisplayIndex)
{
TextBox tb = e.Control as TextBox;
if (tb != null)
{
tb.KeyPress += tb_KeyPress;
}
}
}}
private void tb_KeyPress(object sender, KeyPressEventArgs e)
{
TextBox tb = sender as TextBox;
if (e.KeyChar==(char)Keys.Return)
{
tb.Text = tb.Text + e.KeyChar;
var columnIndex = dgvMeterData.CurrentRow.Cells["TestResults"].ColumnIndex;
var rowIndex = dgvMeterData.CurrentRow.Cells["TestResults"].RowIndex;
dgvMeterData.CurrentCell = (DataGridViewCell)dgvMeterData[columnIndex, rowIndex];
}
}
这帮助我做了几乎相同的事情。我希望你明白了。
private void dgvListItems_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewTextBoxEditingControl)
{
DataGridViewTextBoxEditingControl tb = e.Control as DataGridViewTextBoxEditingControl;
tb.PreviewKeyDown -= dgvListItems_PreviewKeyDown;
tb.PreviewKeyDown += dgvListItems_PreviewKeyDown;
}
}
private void dgvListItems_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyData == Keys.Return)
{
int columnIndex = dgvListItems.CurrentCell.ColumnIndex; ;
int rowIndex = dgvListItems.CurrentCell.RowIndex;
if (columnIndex == dgvListItems.Columns.Count - 1)
{
dgvListItems.CurrentCell = dgvListItems[0, rowIndex + 1];
}
else
{
dgvListItems.CurrentCell = dgvListItems[columnIndex + 1, rowIndex];
}
}
}