使用向上和向下的文本框键在 datagridview 中移动

Posted

技术标签:

【中文标题】使用向上和向下的文本框键在 datagridview 中移动【英文标题】:moving through datagridview with textbox keys up and keys down 【发布时间】:2021-10-20 17:34:35 【问题描述】:

我正在做一个项目,我正在使用一个带有 datagridview 的文本框,在该项目中,只要我在文本框中输入一些东西,datagridview 就会从不可见变为可见,并开始根据我的击键给我建议。代码写在下面。

private void txtUserTypes_KeyDown(object sender, KeyEventArgs e)
    

        switch (e.KeyCode)
        
            case Keys.Up:
                int rpos = dgvUserTypes.CurrentCell.RowIndex;
                int cpos = dgvUserTypes.CurrentCell.ColumnIndex;
                rpos--;
                if (rpos >= 0) dgvUserTypes.CurrentCell = dgvUserTypes.Rows[rpos].Cells[cpos];
                e.Handled = true;
                break;
            case Keys.Down:
                int rpos1 = dgvUserTypes.CurrentCell.RowIndex;
                int cpos1 = dgvUserTypes.CurrentCell.ColumnIndex;
                rpos1++;
                if (rpos1 < dgvUserTypes.Rows.Count) dgvUserTypes.CurrentCell = dgvUserTypes.Rows[rpos1].Cells[cpos1];
                e.Handled = true;
                break;
        

   private void txtUserTypes_TextChanged(object sender, EventArgs e)
    
        try
        
            if(txtUserTypes.Text.Length >0)
            
                dgvUserTypes.Visible = true;
                ViewSearch(txtUserTypes.Text);
            
            else
            
                dgvUserTypes.Visible = false;
            
        
        catch
        

        
    

问题是,只要我按下键盘上的“向上”键,程序就会崩溃并出现异常 " System.NullReferenceException: '对象引用未设置为对象的实例。'

System.Windows.Forms.DataGridView.CurrentCell.get 返回 null。”。我不希望程序崩溃,如果 datagridview 上没有记录,它应该什么都不做。 我还想在 keydown 事件中优化我的代码,因为我已经声明了两次变量(即 rpos 和 rpos1),它们基本上在做同样的事情。

【问题讨论】:

这个副本涵盖了核心问题:What is a NullReferenceException, and how do I fix it? @Ňɏssa Pøngjǣrdenlarp,我要求社区成员查看我的代码并提出更正建议。您的链接只是定义错误。 为什么不使用TextBox.AutoCompleteMode? 【参考方案1】:

如果没有运行示例,我会建议一些简单的东西,例如 ...

private void txtUserTypes_KeyDown(object sender, KeyEventArgs e)

        if (dgvUserTypes.CurrentCell == null) return;

        int rpos = dgvUserTypes.CurrentCell.RowIndex;
        int cpos = dgvUserTypes.CurrentCell.ColumnIndex;

        switch (e.KeyCode)
        
            case Keys.Up:
                rpos--;
                if (rpos >= 0) dgvUserTypes.CurrentCell = dgvUserTypes.Rows[rpos].Cells[cpos];
                e.Handled = true;
                break;

            case Keys.Down:
                rpos++;
                if (rpos < dgvUserTypes.Rows.Count) dgvUserTypes.CurrentCell = dgvUserTypes.Rows[rpos].Cells[cpos];
                e.Handled = true;
                break;
        

【讨论】:

以上是关于使用向上和向下的文本框键在 datagridview 中移动的主要内容,如果未能解决你的问题,请参考以下文章

如何使组合框向上/向下键在 DroppedDown = True 时模拟鼠标

防止“向上箭头”键在文本框中重置光标位置

角度下拉菜单 - 使用键盘上/下键在下拉列表中移动项目

向上和向下键未触发 datagridview 单元格中的按键事件文本框

在 Angular 2 \ 4 表中向上键

想要文本框中的向上和向下箭头来更改列表框选择