c# - 使用向上和向下的文本框键在 datagridview 中移动
问题描述
我正在做一个项目,我正在使用带有 datagridview 的文本框,在该项目中,只要我在文本框中键入 somthing,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),它们基本上在做同样的事情。
解决方案
如果没有运行示例,我会建议一些简单的东西,例如...
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;
}
}
推荐阅读
- python - 使用 jinja2 模板遍历多级 yaml 映射
- angular - 具有许多路由器插座的 Angular 8 父布局
- r - 当我移动到具有更多 RAM 的 VDI 时,为什么会收到“无法分配大小为 x 的向量”的错误消息?
- sql - 合并来自表单相同部分的列
- wpf - 数据绑定 ObservableDictionary 到 DataGrid 不起作用
- google-apps-script - getRange 输出“范围”而不是值
- java - 如何通过传统映射在 Hibernate 5 中指定基于序列的生成值
- css - 如何在 Eclipse 构建器上找到 ruby sass 文件的位置/路径?
- java - 处理 3 三角形未显示在 Javafx 8 窗口选项卡中
- javascript - 我需要创建一个节点 js 脚本,它将读取一个文本文件并输出一个图形。我该怎么做呢?