如何在DatagridView中的Spacekey按事件上显示列表框?

时间:2015-09-18 08:58:00

标签: c# winforms datagridview

在我的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;


            }

由于声誉不佳,我无法向您展示我的表单。

谢谢大家!

3 个答案:

答案 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;
        }
    }