[英]WPF (with C#) TextBox Cursor Position Problem
我有一個WPF C#程序,嘗試在TextChanged事件中從文本框中刪除某些字符。 舉例來說,美元符號。 這是我使用的代碼。
private void txtData_TextChanged(object sender, TextChangedEventArgs e)
{
string data = txtData.Text;
foreach( char c in txtData.Text.ToCharArray() )
{
if( c.ToString() == "$" )
{
data = data.Replace( c.ToString(), "" );
}
}
txtData.Text = data;
}
我遇到的問題是,每當用戶輸入$符號(Shift + 4)時,在TextChanged事件中,它都會從文本框文本中刪除$字符,但是還會將光標移動到不是我的文本框的BEGINNING所需的功能。
作為一種解決方法,我想到了將光標移動到文本框中文本的結尾的問題,但是問題是,如果光標位於某個中間位置,那么它將不會非常友好。 假設例如文本框中的文本為123ABC,如果我將光標放在3后面,那么將光標移到文本的末尾將意味着在下一個擊鍵時,用戶將在C之后而不是3之后輸入數據。正常功能。
有人知道為什么發生光標移動嗎?
它不是您問題的答案,但可能是您問題的解決方案:
如果對您來說e.Handled = true
為您要在PreviewKeyDown
(使用SHIFT鍵的Keyboard.Modifiers
)或PreviewTextInput
避免的所有字符設置e.Handled = true
。
嘗試使用TextBox.CaretIndex
來恢復TextChanged
事件中的光標位置。
希望能幫助到你。
您可以使用TextBox的Select功能來更改光標位置。
private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
textBox1.Text = textBox1.Text.Replace("$", "");
textBox1.Select(textBox1.Text.Length, 0);
}
您可以了解有關在MSDN上定位光標的更多信息
您可以嘗試正則表達式示例
1)在.xaml文件中使用PreviewTextInput="CursorIssueHandler"
2)在您的.cs文件中,編寫以下代碼:
private void CursorIssueHandler(object sender, TextCompositionEventArgs e)
{
var TB = (sender as TextBox);
Regex regex = new Regex("[^0-9a-zA-Z-]+");
bool Valid = regex.IsMatch(e.Text);
//System.Diagnostics.Debug.WriteLine(Valid); // check value for valid n assign e.Handled accordingly your requirement from regex
e.Handled = Valid;
}
您可以使用文本框的SelectionStart
屬性。 這些路線可能應該起作用:
private void txtData_TextChanged(object sender, TextChangedEventArgs e)
{
var pos = txtData.SelectionStart;
string data = txtData.Text.Replace("$", "");
txtData.Text = data;
txtData.SelectionStart = pos;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.