[英]Set last possible position of textbox caret
我有一個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 + "\\";
}
}
private void batchRootFolderText_TextChanged(object sender, EventArgs e){
if (!batchRootFolderText.Text.EndsWith("\\")){
String temp = batchRootFolderText.Text;
temp = temp.Substring(0, MyString.Length - 1);
batchRootFolderText.Text = temp + "\\";
}
}
嘗試切斷弦的末端然后更換它?
您可以添加一個變量來跟蹤反斜杠的位置,並在需要時將其“移動”到最后:
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;
}
}
當用戶刪除字符或用戶自行鍵入反斜杠字符時,請記住添加處理。
您可以使用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;
這段代碼應該做的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.