0

我在 DataGridView 中有“多行”(自动换行)文本框列。能够像普通文本框一样编辑它们会很棒,也就是说,当我按下向下箭头时,我希望插入符号在文本框中向下一行,我不希望它跳到下一行,因为它通常会。同样,我希望按 Enter 在文本框单元格中创建一个新行,但它会完成编辑.

否则说:我想覆盖某些按键(或按键)的正常行为,以便用户可以像编辑普通文本框一样编辑文本框单元格,并使用箭头在其中导航并使用 enter 创建新行。

我尝试在 DataGridView 中操作 keydown 事件,但没有成功。

感谢您的任何想法或意见。

4

1 回答 1

2

这个问题在这里向我展示了解决它的方法。这是代码:

class MyDataGridView : DataGridView
{

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if ((keyData == Keys.Enter) && (this.EditingControl != null))
        {
            //new behaviour for Enter
            TextBox tb = (TextBox)EditingControl;
            int pos = tb.SelectionStart;
            tb.Text = tb.Text.Remove(pos, tb.SelectionLength);
            tb.Text = tb.Text.Insert(pos, Environment.NewLine);
            tb.SelectionStart = pos + Environment.NewLine.Length;
            tb.ScrollToCaret();
            //and do nothing else
            return true;
        }
        else if ((keyData == Keys.Up) && (this.EditingControl != null))
        {
            //programmatically move caret up
            //(look at related question to see how)
            return true;
        }
        else if ((keyData == Keys.Down) && (this.EditingControl != null))
        {
            //programmatically move caret down
            //(look at related question to see how)
            return true;
        }
        //for the rest of the keys, proceed as normal
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

所以这是对 DataGridView 的简单更改,它可以工作。我只需要

  • 创建这个新类,并且
  • 将 DesignerClass 中的两行更改为使用 MyDataGridView 而不是 DataGridView(声明和初始化)

其他一切都按预期工作。

相关问题:如何以编程方式将插入符号上下移动一行

于 2012-06-20T13:07:11.957 回答