我有一个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 + "\\";
}
}
答案 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;
此代码应该可以完成工作。