2016-04-10 7 views
-1

Как я могу оставить только один «0» перед «.»? «» Я делаю TextBox который принимает только цифры, и вы можете написать только один «0» и раньше, но вы можете написать любые цифры, как 900 или 5000.Только один «0» перед «.» в textBox_TextChanged

Вот псевдокод я использую:

if (0 > 1 before "." && 0 is first digit) 
{ 
    Remove all zeros before "." and left one; 
} 

+1

отправьте код, который вы в настоящее время используете для ограничения цифр. – CathalMF

+0

if (0> 1 до "." && 0 - первая цифра) { Удалить все нули до "." и оставил один; } – Ovidzikas

+1

Попробуйте использовать 'NumericUpDown' или' MaskedTextBox' –

ответ

0

простейшим способом, вероятно, чтобы удалить все из 0 в начале;

textbox.Text = textbox.Text.TrimStart('0'); 

И затем, если оно начинается с '.' снова добавьте «0» назад в начало.

if (textbox.Text.StartsWith('.')) 
    textbox.Text = '0' + textbox.Text; 

Это также приведет к удалению любого 0 в начале, например, «00500», изменив его на «500», который, вероятно, хорошая вещь.

0

использовать его как это

for (int i=0;i<textbox.Text.Length;i++) 
{ 
    textbox.Text=textbox.Text.Replace("00.","0.") 
} 
+0

Это не приведет к удалению всех нулей, если вы не выполните цикл в обратном порядке. –

+0

Чувак это не работает :(Когда я пишу 200.5, он удаляет последний ноль: DI может записывать только один ноль перед любой цифрой: D – Ovidzikas

+0

Я не понимаю, что такое цикл для этого? –

0

Ретрансляция события TextChanged имеет некоторые недостатки. Например, пользователь может захотеть ввести нули, а затем предварять их цифрой (.). Ваш код удалит все начальные нули перед вводом цифры. Лучше использовать другое событие, например Validating или LostFocus. Код будет довольно просто:

textbox.Text = textbox.Text.TrimStart('0'); 

Вы можете использовать NumericUpDown управления для числового только для ввода. Он будет проверять, является ли текст числом и отформатировать его в соответствии с настройками, такими как DecimalPlaces.

0

Может быть, это один может помочь:

public string ZeroPoint(string a) 
{ 
    int pos = a.IndexOf("."); 
    if (pos > -1 && a.Substring(0, pos) == new string('0', pos)) 
    { 
    a = "0" + a.Substring(pos, a.Length - pos); 
    } 
    return a; 
} 
0

Вы должны использовать KeyPress событие и добавить ниже логику для определения того, что нажата и когда введенное значение будет размещен.

Когда вы устанавливаете значение e.Handled в значение true, вы сообщаете системе игнорировать вход пользователя.

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    // Only allow digits, decimal points and control characters (Backspace, delete, etc) 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && 
     (e.KeyChar != '.')) 
    { 
     e.Handled = true; 
    } 

    int PointIndex = (sender as TextBox).Text.IndexOf('.'); 

    // only allow one decimal point and one digit before decimal point 
    if (((e.KeyChar == '.') && PointIndex > -1) || 
     (e.KeyChar == '.' && textBox1.SelectionStart > 1) || 
     (PointIndex == 1 && textBox1.SelectionStart <= PointIndex)) 
    { 
     e.Handled = true; 
    } 
} 

Этот код проверяет ввод пользователей во время их ввода.

EDIT:

Кроме того, поскольку этот код только подтверждает вход как пользователь печатает вы также хотите, чтобы предотвратить их вставив в недопустимых значений. Вы можете сделать это, установив для свойства ShortcutsEnabled текстового поля значение false.

+0

, но если я вставляю текст в это текстовое поле, он не будет обрезать все нули до '.' – Ovidzikas