【问题标题】:c# datagridview key handlingc# datagridview 键处理
【发布时间】:2012-02-15 08:44:00
【问题描述】:

我使用 DataGridView,并在某些地方添加了控件(例如文本框、组合框)

 dataGridView1.Controls.Add(comboBox);
 comboBox.Focus();

问题在于,使用此控件,而不是通过使用 ENTER 提交选择导致 DataGridView “处理”键 -> 在单击输入而不是从组合框中选择某物后,datagridview 中的选择会更改(移动到下一个单元格) .

我使用类似的东西:

   public class MyDataGridView:DataGridView
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if(keyData == Keys.Enter)
        {
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

但这会导致 datagridview 和组合框不响应 ENTER 和其他键...

附加信息:我必须使用 ComboBox 类,而不是 DataGridViewCombobox。任何人都可以帮助我如何在我的组合框中处理 ENTER 吗?

【问题讨论】:

  • 您向我展示了解决类似问题的方法。我发布了一个解决方案here 我认为您必须在覆盖的 ProcessCmdKey 中处理 ENTER。我没有找到其他方法。
  • 你解决了吗?我认为您可以在 MyDataGridViewClass 中保存对您的 ComboBox 的引用,以便您可以从 ProcessCmdKey 方法中对其进行操作。

标签: c# winforms datagridview combobox


【解决方案1】:

试试:

if((keyData == Keys.Enter) && (MyComboBox.Focused))

所以 DataGridView 会响应 ENTER,除非您的控件获得焦点。

我不确定以下代码是否适合您的情况,但也许您可以尝试以下代码:

public class MyDataGridView:DataGridView
{
    public ComboBox MyComboBox { get; set; } //in case you had no other way to refer to it

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if((keyData == Keys.Enter) && (MyComboBox.Focused))
        {
            //commit choice logic
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

如果需要,从您的表单中设置对 ComboBox 的引用:

dataGridView1.Controls.Add(comboBox);
dataGridView1.MyComboBox = comboBox;
comboBox.Focus();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多