2014-01-11 36 views
0

我目前正在開發一個用戶界面系統。限制「。」的輸入並有多少條目跟着它

我如何:

  • 保證 「」只能在文本字段中輸入一次
  • 確保在「。」之後只能輸入一個值。下面

代碼:

private void AppendValue(string valueToAppend) 
    { 
     if (remainTxt.BackColor == Color.FromArgb(245, 244, 162)) 
     { 
      remainTxt.AppendText(valueToAppend); 
     } 
     else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162)) 
     { 
      totalTxt.AppendText(valueToAppend); 
     } 
     else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162)) 
     { 
      paidTxt.AppendText(valueToAppend); 
     } 
    } 

    private void btn1_Click(object sender, EventArgs e) 
    { 
     AppendValue("1"); 
    } 

    private void btn2_Click(object sender, EventArgs e) 
    { 
     AppendValue("2"); 
    } 

    private void btn3_Click(object sender, EventArgs e) 
    { 
     AppendValue("3"); 
    } 

    private void btn4_Click(object sender, EventArgs e) 
    { 
     AppendValue("4"); 
    } 

    private void btn5_Click(object sender, EventArgs e) 
    { 
     AppendValue("5"); 
    } 

    private void btn6_Click(object sender, EventArgs e) 
    { 
     AppendValue("6"); 
    } 

    private void btn7_Click(object sender, EventArgs e) 
    { 
     AppendValue("7"); 
    } 

    private void btn8_Click(object sender, EventArgs e) 
    { 
     AppendValue("8"); 
    } 

    private void btn9_Click(object sender, EventArgs e) 
    { 
     AppendValue("9"); 
    } 

    private void btn0_Click(object sender, EventArgs e) 
    { 
     AppendValue("0"); 
    } 

    private void btndot_Click(object sender, EventArgs e) 
    { 
     AppendValue("."); 
    } 
+0

嘗試['string.IndexOf()'](http://msdn.microsoft.com/en-us/library/system.string.indexof(v = vs.110).aspx)。 @ MUG4N是無關緊要的。 – CodeCaster

+0

web或winforms? – MUG4N

+0

@ MUG4N winforms – methuselah

回答

1

使用一些標誌在代碼中的全局變量。 這些標誌在輸入開始時應該被清除。 當您收到字符「。」那麼你應該檢查該標誌以便將其附加到先前的值。 此外,當你收到號碼,你應該檢查是否已經輸入一個點,如果是的話,如果一個號碼已經輸入(你應該使用2個標誌)。

或者您可以使用一個數字來表示您輸入點後的數字。 在第一次接收到設置該計數器= 1的「點」時。在收到一位數字後,您檢查該計數器,如果它小於您在點之後需要的最大位數,則將其附加到該值並將計數器加1。

問題是您還需要處理退格字符以反轉您的操作。所以應該注意一些問題,最好是像下面那樣行事:

在代碼中使用帶有全局變量的標誌。 這些標誌在輸入開始時應該被清除。 當您收到字符「。」那麼你應該檢查該標誌以便將其附加到先前的值。 此外,當你收到號碼,你應該檢查是否已經輸入一個點,如果是的話,如果一個號碼已經輸入(你應該使用2個標誌)。 或者你可以用一個數字來表示你輸入點後的數字。 在第一次接收到設置該計數器= 1的「點」時。在收到一位數字後,您檢查該計數器,如果它小於您在點之後需要的最大位數,則將其附加到該值並將計數器加1。

問題是您還需要處理退格字符以反轉您的操作。所以應該給予一些關心。

所以你應該得到新的數字,如果它是退格,你應該從字符串中刪除最後一個字符。 如果它是數字,則用它創建一個新字符串,並檢查該字符串是否爲您需要的格式(僅爲該範圍創建一個函數)。 如果不是,則丟棄新數字。 如果格式爲「好」,那麼您接受它並將其追加回收集的字符串。

之後,您使用一個函數來檢查您是否接受可能的輸出。 如果是這樣,那麼你真的將該字符附加到該值。如果不是,則放棄收到的事件。該方法還允許接收退格字符,從而刪除到目前爲止形成的文本的最後一個字符。

1

你有沒有考慮通過發送方傳遞價值,創造只有一個事件處理程序?例如?

public class MyForm : Form { 
bool DotAlreadyExists { 
    get { 
    return remainTxt.Contains("."); 
    } 
} 
void OnClick(object sender, EventArgs e) { 
    var button (sender as Button); 
    if(button != null) { 
    string toAppend = button.Text; 
    if(!String.Equals(toAppend, ".")) { 
     AppendValue(toAppend); 
    } 
    else { 
    if(!DotAlreadyExists) { 
    AppendValue(toAppend); 
} 

    } 
    } 
} 
} 

我沒有嘗試運行此代碼,但我希望你覺得這個想法:)

0

我將定義一個布爾變量:

bool dotControl = false; 

,並更改它,當點追加:

private void btndot_Click(object sender, EventArgs e) 
{ 
    if(!dotControl) 
    { 
     AppendValue("."); 
     dotControl = true; 
    } 
} 

那就要檢查一下數字計數後點定義另一個變量:

int count = 0; 

並檢查它的每一個按鈕點擊:

private void btn1_Click(object sender, EventArgs e) 
{ 
    if(dotControl && count == 0) 
    { 
     AppendValue("1"); 
     count++; 
    } 

    else if(!dotControl) { AppendValue("1"); } 

} 
1

在現實中,你會期望從EPOS系統的功能將是您輸入2099,屏幕會顯示$ 20.99。或者,如果你輸入199,你會得到$ 1.99

因此,一個更好的方法是:

private void AppendValue(int valueToAppend) 
{ 
    if (remainTxt.BackColor == Color.FromArgb(245, 244, 162)) 
    { 
     remainTxt.Text = (Decimal.Parse(remainTxt.Text) * 10) + (valueToAppend/100); 
    } 
    else if (totalTxt.BackColor == Color.FromArgb(245, 244, 162)) 
    { 
     totalTxt.Text = (Decimal.Parse(totalTxt.Text) * 10) + (valueToAppend/100); 
    } 
    else if (paidTxt.BackColor == Color.FromArgb(245, 244, 162)) 
    { 
     paidTxt.Text = (Decimal.Parse(paidTxt.Text) * 10) + (valueToAppend/100); 
    } 
} 

這意味着你可以做掉與.按鈕。您還可以創建一個DEL按鈕會變成$ 11.99$ 1.19

private decimal SubtractValue(decimal originalValue) 
{ 
     return Math.Floor(originalValue * 10)/100; 
} 

你可能也想用:

Decimal.ToString("######0.00")Decimal.ToString("c")以確保正確的貨幣格式。