将Datagridview文本框焦点移动到下一个而不是向下移动条形码读取完成

时间:2016-03-24 22:18:29

标签: c# winforms datagridview barcode-scanner

我正在使用条形码扫描仪。在简单的文本框中,我通过查找Keys.Return来处理KeyPress事件。这有助于我了解条形码读取已完成。 但是在使用datagridview文本框时。条形码阅读器也没有按键事件发送返回也默认数据网格视图在条形码读取完成后将光标移动到向下。我想将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];
            }
        }

1 个答案:

答案 0 :(得分:0)

这帮助我做了几乎相同的事情。我希望你明白这一点。

    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];
            }
        }
    }
相关问题