我在DataGridView中有“multiline”(wordwrapping)文本框列。能够将它们编辑为普通的TextBox会很棒,也就是说,当我按下箭头时,我希望插入符号在文本框中向下移动一行,我不希望它跳转到下一行行,通常是。同样,我希望按下Enter键在文本框单元格中创建一个新行,但它会完成编辑。
否则说:我想覆盖某些按键(或keydowns)的正常行为,以便用户可以像编辑普通文本框一样编辑文本框单元格,并使用箭头在其中导航并使用enter创建新行。 / p>
我尝试在DataGridView中操作keydown事件,但它没有用。
感谢您的任何想法或意见。
答案 0 :(得分:2)
This question here向我展示了解决问题的方法。这是代码:
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的简单更改,它可以工作。我只需要
其他一切按预期工作。
相关问题:how to programmatically move caret up and down one line。