0

私は現在 #9.99 のマスクを持っています。# は「+」または「-」記号です。

Masked テキスト ボックスの値を負の値に設定すると、正しい値が得られます。

ただし、値が正の場合、間違った答えが得られます。

これをテストするための実際のコードは次のとおりです。例えば。

private void Form1_Load(object sender, EventArgs e){
    double value = -0.14;
    double value2 = 0.14;

    maskedTextBox1.Text = value.ToString();
    maskedTextBox2.Text = value2.ToString();
}

これが結果です

_0.14にする必要があります

ユーザーが右から左に入力したくないため、RightToLeft からのプロパティの設定は機能しません。

どんな助けでも大歓迎です。

4

2 に答える 2

1

がテキストの表示方法を決定するため、直接設定Textしても機能しません。が最初になり (ドットが無視されるため)、次にからフォーマットを適用した後に になります。を直接設定したい場合は、独自の を作成する必要があるかもしれませんが、これは簡単ですが、代わりに を使用するソリューションを提供したいと思います。Mask0.1401401401.4_MaskTextMaskedTextBoxextension method

public static class MaskedTextBoxExtension {
   public static void SetValue(this MaskedTextBox t, double value){
      t.Text = value.ToString(value >= 0 ? " 0.00" : "-0.00");
   }
}
//I recommend setting this property of your MaskedTextBox to true
yourMaskedTextBox.HidePromptOnLeave = true;//this will hide the prompt (which looks ugly to me) if the masked TextBox is not focused.
//use the code
yourMaskedTextBox.SetValue(0.14);// =>  _0.14
yourMaskedTextBox.SetValue(-0.14);// => -0.14
于 2013-07-17T15:56:27.663 に答える
1

スペースを埋める必要があると思います:

maskedTextBox2.Text = value2.ToString().Length < maskedTextBox2.Mask.Length ? 
            value2.ToString().PadLeft(maskedTextBox2.Mask.Length,' '): value2.ToString();

OPのコメントに応じて回答を編集:

// Pad the left of decimal with spaces
string leftOfDecimal = value.ToString().Split('.')[0].PadLeft(maskedTextBox1.Mask.Split('.')[0].Length);
// Pad the right with 0s
string rightOfDecimal = value.ToString().Split('.')[1].PadRight(maskedTextBox1.Mask.Split('.')[1].Length,'0');

maskedTextBox1.Text = leftOfDecimal + "." + rightOfDecimal;

valueに小数点があるかどうかを確認する必要があることに注意してください。上記のコードにはそのようなチェックはありません。と入力double value = 25すると爆破します。あなたが処理しなければならない他のエッジケースもあるかもしれません。

于 2013-07-17T11:39:16.167 に答える