在c#文本框中,当按下回车键时,如何确定按下它的索引?
例如,我有一个名为
txtDesc
的文本框,并且 txtDesc
当前包含短语
“敏捷的棕色狐狸跳过了那只懒狗。”
我的光标位置在“fox”这个词之后,然后我按下了回车键...
我如何知道我按了哪个索引位置回车键?
private void txtDesc_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
//enter key is down
//How do I know which index position I pressed the enter key?
}
}
我应该能够得到索引 19,因为那是“fox”之后的位置。
我想要这个位置,这样我就可以手动将 html 代码“
”放在单词“fox”之后。这是我按下回车键的地方...
在 WinForms(在
System.Windows.Forms
中找到的控件)上,当 SelectionStart
为 0 时,插入符号位置可以在 SelectionLength
位置找到。当 SelectionLength
大于 0 时,插入符号可以位于选择的开始或结束处,这不是特别有用...但在这种情况下它可能并不重要。
如果您想在添加新行时插入 HTML 样式
<BR>
,则需要稍微调整文本框的内容。
这是一种方法(同样适用于 WinForms 项目):
private void txtDesc_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode != Keys.Enter || e.Modifiers != 0)
return;
var (p, l) = (txtDesc.SelectionStart, txtDesc.SelectionLength);
string newText = $"{txtDesc.Text[..p]}<br>\r\n{txtDesc.Text[(p + l)..]}";
txtDesc.Text = newText;
txtDesc.SelectionStart = p + 6;
txtDesc.SelectionLength = 0;
e.SuppressKeyPress = true;
}
这允许您使用
Shift+Enter
分割一行,而无需插入 <br>
标签,如果您在有活动选择时按 Enter 键,它将用标签替换所选文本。