从右到左设置MaskedTextBox值

时间:2013-07-17 10:38:29

标签: c# winforms maskedtextbox

我目前的面具是#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();
}

Here is the result

我需要 _0.14

从RightToLeft设置属性不起作用,因为我不希望用户从右到左键入。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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,它会爆炸。可能还有其他边缘情况需要处理。

答案 1 :(得分:1)

直接设置Text不起作用,因为Mask将决定文本的显示方式。 0.14将首先变为014(因为该点将被忽略),然后014在应用01.4_格式后将变为Mask。如果您想直接设置Text,可能需要创建自己的MaskedTextBox,虽然这很简单,但我想为您提供我们使用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