我在 DataGridView 中有“多行”(自动换行)文本框列。如果能够像普通文本框一样编辑它们,那就太好了,当我按下向下箭头时,我希望插入符在文本框中向下一行,我不希望它像通常那样跳到下一行。同样地,我希望按 Enter 键在文本框单元格内创建一个新行,但它会完成编辑.
否则说:我想覆盖某些按键(或按键)的正常行为,以便用户可以像普通文本框一样编辑文本框单元格,并使用箭头在其中导航并使用 Enter 创建新行。
我尝试在 DataGridView 中操作 keydown 事件,但它不起作用。
感谢您的任何想法或评论。
这个问题在这里 https://stackoverflow.com/questions/9290203/c-sharp-datagridview-key-handling向我展示了解决该问题的方法。这是代码:
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 的简单更改并且它有效。我只需要
-
创建这个新类, and
-
更改 DesignerClass 中的两行使用 MyDataGridView 而不是 DataGridView(声明和初始化)
其他一切都按预期进行。
相关问题:如何以编程方式将插入符上下移动一行 https://stackoverflow.com/questions/11123067/programmatically-move-caret-in-textbox-line-up-and-line-down.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)