C# 在DataGridView中编辑一个文本框单元格,就像它是一个普通的文本框一样(按箭头时不跳跃)

C# 在DataGridView中编辑一个文本框单元格,就像它是一个普通的文本框一样(按箭头时不跳跃),c#,winforms,datagridview,C#,Winforms,Datagridview,我在DataGridView中有“多行”(换行)文本框列。如果能够将它们编辑为普通文本框,那就太好了,也就是说,当我按下向下箭头时,我希望插入符号在文本框中向下移动一行,我不希望它像通常那样跳转到下一行。类似地,我希望按enter键在textbox单元格中创建一个新行,但它会完成编辑 否则说:我想覆盖一些按键(或向下键)的正常行为,这样用户就可以像编辑普通文本框一样编辑文本框单元格,并用箭头在其中导航,用enter键创建新行 我尝试在DataGridView中操纵keydown事件,但没有成功

我在DataGridView中有“多行”(换行)文本框列。如果能够将它们编辑为普通文本框,那就太好了,也就是说,当我按下向下箭头时,我希望插入符号在文本框中向下移动一行,我不希望它像通常那样跳转到下一行。类似地,我希望按enter键在textbox单元格中创建一个新行,但它会完成编辑

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

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

谢谢你的任何想法或意见。

向我展示了解决问题的方法。代码如下:

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(声明和初始化)
其他一切都如期进行


相关问题:.

当我按下向下箭头时,插入符号在文本框内向下移动一行,它不会跳到下一行
-这是预期的还是不预期的?@AngshumanAgarwal,我更改了第一段,以使我的目的更清楚。感谢您指出歧义。您在
MS-EXCEL
中看到过这种行为吗?只需打开一个电子表格并尝试<代码>如果在单元格上点击F2,则它将进入编辑模式。要在编辑时转到新行,您必须使用ALT+Enter。但是,只需按
Enter
即可结束编辑并移动到下面的新行/单元格。所以,只要问一下——为什么要脱离标准功能?@AngshumanAgarwal Alt+Enter也会完成编辑,这与MS Excel不同。标准功能适用于单元格的单行内容,但在编辑多行文本时,您不能在文本中上下移动,也不能创建新行,或者至少我不知道如何创建新行。标记您自己的答案是可以的。。。特别是当它工作并且没有其他发布的解决方案时。。