在c#文本框中,我如何知道我按Enter键的确切索引位置?

问题描述 投票:0回答:1

在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”之后。这是我按下回车键的地方...

c# textbox
1个回答
0
投票

在 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 键,它将用标签替换所选文本。

© www.soinside.com 2019 - 2024. All rights reserved.