【问题标题】:Move inside a DataGridViewCell in a DataGridView using cursor keys使用光标键在 DataGridView 中的 DataGridViewCell 内移动
【发布时间】:2017-07-30 07:19:34
【问题描述】:

如果能在以下方面提供帮助,我将不胜感激。

我有一个 DataGridView 表单,其中包含各种文本单元格。启用自动换行,如果单元格的内容长于单元格宽度,则自动换行,然后自动调整行高。

但是,我希望用户能够轻松地编辑单元格的内容。如果单元格中有很多文本,从一端到另一端的唯一方法是使用RightLeft 光标键。如果您按下UpDown 光标键,人们会期望它移动到下一行在同一单元格内。但是UpDown 键将Focus当前单元格 更改为下一个相邻单元格

有什么方法可以覆盖此行为,以便在edit 模式下,您可以使用UpDownLeftRight 键在单元格内而不是周围导航

我尝试了各种方法,但无济于事(例如,以编程方式编辑单元格内 TextBox 的多行属性)。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 检查this out
  • 感谢发帖。查看该页面,它似乎正在处理使用键在 DataGridView 周围导航时如何跳过特定单元格。使用按键时,我试图留在当前单元格内 - 即按光标键可移动 当前单元格 中的文本。
  • 那是因为在 inside 一个单元格中,你处于它的 edit 模式。因此光标键只会移动选择光标
  • 对不起。在最初的问题中,我说当我使用光标键时,它不会在当前单元格中移动,而是移动到下一个单元格。在单元格的编辑模式下激活光标键的正常动作是我想做的。
  • 对不起,我误读了这个问题,尝试自己重现该问题,是的,我面临同样的问题。谷歌似乎没有提供任何可行的结果。关闭一切后,我最终在this link,立即尝试。

标签: c# datagridview


【解决方案1】:

这是问题所在:见here

TextBox 的按键事件不会被触发,因为箭头键会移动到下一个单元格。

因此,您需要创建一个自定义的 DataGridView 并改用它:

public class EditableDataGridView : DataGridView
{
    protected override bool ProcessDialogKey(Keys keyData)
    {
        Keys key = (keyData & Keys.KeyCode);
        if ( ( key == Keys.Up || key == Keys.Down ) && this.IsCurrentCellInEditMode )
        {
            return false; 
        }
        return base.ProcessDialogKey(keyData);
    }

    protected override bool ProcessDataGridViewKey(KeyEventArgs e)
    {
        if ( ( e.KeyCode == Keys.Up || e.KeyCode == Keys.Down ) && this.IsCurrentCellInEditMode )
        {
            return false;
        }
        return base.ProcessDataGridViewKey(e);
    }
}

因为键处理程序返回 false(即事件不在 DataGridView 中处理),所以按键向下流到 TextBox 本身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多