在我的Winform应用程序中,有一个DataGrid视图( dataGridView1 )和2个列表框, listBox1 和 listBox2 。在dataGridView1中,有三列,Column1(id),Column2(Category)和Column3(Items)。我想显示listBox1,包含用户按空格键时的分类,按Enter按钮后应该关注Items列。
我找到了一些解决方案,但没有达到我的要求。我想要类似的东西,
If (spacebar is pressed && dataGridView1.CurrentCell.ColumnIndex== 2)
{
listbox1.Visible = true;
listbox1.Focus();
listbox1.SelectedIndex = 0;
}
由于声誉不佳,我无法向您展示我的表单。
谢谢大家!
答案 0 :(得分:0)
很长一段时间以来我使用了数据网格视图,但是如果你检查它的事件,我认为你有一个CellEnter和一个CellLeave事件,你可以用它来检查选择哪个列并修改可见列表视图的属性。
CellEnter的事件处理程序有一个列索引参数可以帮助您。
答案 1 :(得分:0)
在datagridview的keydown事件
if (e.KeyCode == Keys.Space)//check if space is pressed
{
if(dataGridView1.CurrentCell.ColumnIndex== 2)
{
listbox1.Visible = true;
listbox1.Focus();
}
}
要检查输入密钥,请在datagrid的keydown事件中使用它
if (e.KeyCode == Keys.Enter) //if enter key is pressed change selected index
{
listbox1.SelectedIndex = 3;
}
答案 2 :(得分:0)
在第0列(id)中,不进行编辑,按enter键并移动下一个单元格:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter && dataGridView1.CurrentCell.ColumnIndex == 0)
{
dataGridView1.CurrentCell = dataGridView1[1, dataGridView1.CurrentCell.ColumnIndex];
}
}
在第0列(id)中,编辑,按回车键并移动下一个单元格(从here回答):
private int currentRow;
private bool resetRow = false;
void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (resetRow)
{
resetRow = false;
dataGridView1.CurrentCell = dataGridView1.Rows[currentRow].Cells[1];
}
}
void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
resetRow = true;
currentRow = e.RowIndex;
}
*注意:您可能需要在完成绑定数据后将SelectionChanged
事件绑定到datagridview,而不是在设计时绑定。
在第1列(猫)和第2列(项目)中,按空格键显示列表猫和列表项:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView1.CurrentCell.ColumnIndex == 1)
((TextBox)e.Control).KeyPress += new KeyPressEventHandler(col1_KeyPress);
if (dataGridView1.CurrentCell.ColumnIndex == 2)
((TextBox)e.Control).KeyPress += new KeyPressEventHandler(col2_KeyPress);
}
void col1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 32)
{
listBox1.Visible = true;
listBox1.Focus();
listBox1.SelectedIndex = 0;
}
}
void col2_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 32)
{
listBox2.Visible = true;
listBox2.Focus();
listBox2.SelectedIndex = 0;
}
}