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

我认为您将需要填充空间:

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 回答
1

像你一样直接设置Text是行不通的,因为这Mask将决定文本的显示方式。0.14将成为014第一个(因为点将被忽略),然后01401.4_在应用格式后成为Mask. 如果你想Text直接设置,你可能需要创建你自己的MaskedTextBox,虽然这很容易,但我想给你一个我们使用 an 的解决方案extension 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 回答