2013-05-15 67 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

谢谢你,你已经回答了,但:) –

相关问题