2013-07-17 48 views
0

我目前有一個#9.99的面具 #有用於'+'或' - '的符號。從右至左設置MaskedTextBox值

當我設置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

從從右至左設置屬性不起作用,因爲我不希望用戶從左邊到右邊輸入。

任何幫助,非常感謝。

+0

如果你想在值爲正值前有'+'符號嗎? –

+0

我希望在本次展會上展示_0.14,甚至在前面有一個積極的價值可以發揮作用。 – Dreamer78692

+0

你使用的是什麼樣的'MaskedTextBox'?因爲標準的沒有「價值」屬性。 –

回答

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,它會炸燬。可能還有其他邊緣情況,您必須處理。

+0

這個問題是,如果我添加一個額外的小數位掩碼,即從#9.99到#9.999它將給出__。014而不是_0.14的結果 – Dreamer78692

+0

在這種情況下,您將確定後的位數小數點和填充0向右和小數點前的數字,你將不得不填充空格左邊。看到我編輯的答案。 – unlimit

1

直接設置Text,因爲Mask將決定如何顯示文本。 0.14將首先變爲014(因爲該點將被忽略),並且在應用Mask的格式之後,014將變爲01.4_。如果您想直接設置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