2016-04-10 8 views
-1

"。"の前に1つだけ "0"を残すことはできますか? 「」私は数字だけを受け入れ、あなたが前に一つだけ「0」を書き込むことができるTextBoxを作ってるんだが、あなたはここでは900または5000"。"の前に1つだけ "0" in textBox_TextChanged

などの任意の数字を書くことができ、私が使用して擬似コードです:

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

+1

数字を制限するために現在使用しているコードを投稿してください。 – CathalMF

+0

if( "。" && 0が先頭桁の前の0> 1) { "。"の前にすべてゼロを削除します。左に1つ。 } – Ovidzikas

+1

NumericUpDownまたはMaskedTextBoxを使用してください –

答えて

0

最も簡単な方法は、開始時に0をすべて削除するには、おそらくあるようにそれを使用します。

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

「 '」で始まる場合は、最初に「0」を追加してください。

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

また、これはおそらく良いことである、「500」に変更する、例えば、「00500」の冒頭で任意の0を削除します。

0

この

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

これは、逆の順序でループしない限り、すべてのゼロを削除しません。 –

+0

Dudeそれは動作しません:(私は200.5を書くとき最後のゼロを削除する:DIは任意の桁の前に1つのゼロを書くことができます: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