我目前的面具是#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设置属性不起作用,因为我不希望用户从右到左键入。
非常感谢任何帮助。
答案 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