2013-05-15 64 views
1

我正在寫一個小小的財務相關的應用程序,並且希望確保我的用戶知道如何寫一個十進制值(使用DOT而不是COMMA。)WinForms,在Text.Replace後設置輸入光標在文本末尾

要確保輸入正確,我已按如下方式將控件提交給TextChanged事件。

 // Remove people not knowing how to write decimals. 
     if (ExpenseValueTB.Text.Contains(',')) { 
      ExpenseValueTB.Text = ExpenseValueTB.Text.Replace(',', '.'); 
      ExpenseValueTB.Focus(); 
     } 

現在,這絕對有效,但不幸的是輸入光標跳回到開頭。因此,如果有人想寫'15,96' ,他們最終書寫9615.

我環顧四周,但其他類似的問題是JS或PHP

非常感謝!

+1

請注意,用戶可能想要輸入123,45.67,因此不是每個逗號都應該被點替換。 – Bolu

+0

謝謝博盧,沒錯。雖然我的計劃是管理小家庭開支。我應該考慮一下,但對於未來的實施。基本上我應該只允許一個點,作爲浮點分頻器。 –

回答

3

你可以使用SelectionStartSelectionLength從文本框的基礎方法

if (ExpenseValueTB.Text.Contains(',')) { 
     ExpenseValueTB.Text = ExpenseValueTB.Text.Replace(',', '.'); 
     ExpenseValueTB.SelectionStart = ExpenseValueTB.Text.IndexOf('.') + 1; 
     ExpenseValueTB.SelectionLength = 0; 
     ExpenseValueTB.Focus(); 
    } 

,但可能是你最好的辦法是消除簡單的文本框,並使用MaskedTextBox中,可以讓你更好地格式化用戶輸入

+0

這是輝煌的,謝謝,工作! :) –

+0

也,謝謝你使用MaskedTextBox的建議,我會考慮它。 –

+0

MaskedTextBox現在是 – Steve

1

那是你在找什麼?

ExpenseValueTB.SelectionStart = ExpenseValueTB.Text.Length;
+0

謝謝你,你已經回答了,但:) –

相關問題