设置文本框插入符号

时间:2017-06-12 14:35:02

标签: c# winforms textbox

我有一个textbox和一个TextChanged事件,只要用户输入内容,就会自动将反斜杠添加到文本框的末尾如果还没有。

这很好用,除非用户将光标放在反斜杠和类型之后的文本框的末尾,它会将反斜杠移到左边,添加新文本,然后是最后的另一个反斜杠。

例如,用户输入C并显示C\。现在,如果他们点击\后点击a,则显示C\a\,当我想要的只是Ca\时。

所以我需要一种方法来将文本框中光标的最后位置设置在反斜杠之前,如果用户试图在反斜杠之后设置它。

这里是textchanged事件的代码:

private void batchRootFolderText_TextChanged(object sender, EventArgs e)
{
    if (!batchRootFolderText.Text.EndsWith("\\"))
    {
        batchRootFolderText.Text = batchRootFolderText.Text + "\\";
    }
} 

3 个答案:

答案 0 :(得分:0)

SQLFeatureNotSupportedException

尝试将弦的末端切掉,然后更换它?

答案 1 :(得分:0)

您可以添加一个变量来跟踪反斜杠的位置,并在需要时将其“移动”到最后:

int backSlashIndex = -1;

private void batchRootFolderText_TextChanged(object sender, EventArgs e)
{
    if (!batchRootFolderText.Text.EndsWith("\\"))
    {
        if(backSlashIndex != -1)
        {
            var fullText = batchRootFolderText.Text;

            var beforeBackslashText = fullText.Substring(0, backSlashIndex);
            var afterBackslashText = fullText.Substring(backSlashIndex + 1, fullText.Length - beforeBackslashText.Length - 1);

            batchRootFolderText.Text = beforeBackslashText + afterBackslashText;
        }

        batchRootFolderText.Text = batchRootFolderText.Text + "\\";
        backSlashIndex = batchRootFolderText.Text.Length - 1;
    }
}

请记住为用户删除字符或用户自行键入反斜杠字符时添加处理。

答案 2 :(得分:0)

您可以使用SelectionStart属性设置光标位置: https://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.selectionstart(v=vs.110).aspx

在SelectionChanged事件(https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.textboxbase.selectionchanged(v=vs.110).aspx)中,您可以检查插入符号是否在文本末尾,文本是否以反斜杠结束并调整位置。

if (textBox.SelectionStart == textBox.Length - 1 && textBox.Text.EndsWith(@"\")
    textBox.SelectionStart = textBox.Length - 2;

此代码应该可以完成工作。