2012-04-06 9 views
-1

Ich habe ein Textfeld, das einen Dezimalwert sagt 10500.00 das Problem ist, dass die Art, wie ich es habe, wenn Sie einen Wert eingeben und dann die Dezimalstellen eingeben, würde es nicht zulassen, dass Sie die Textbox rückgängig machen oder löschen um einen neuen Wert einzugeben .. es bleibt einfach stecken .. Ich habe versucht, den Wert zurück auf 0,00 zu setzen, aber ich denke, ich habe es an der falschen Stelle platziert, weil es nicht ändern wird. Hier ist mein CodeTextbox mit Dezimaleingabe Verbesserung

private void txtTransferAmount_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      bool matchString = Regex.IsMatch(textBoxTransfer.Text.ToString(), @"\.\d\d"); 
      if (matchString) 
      { 
       e.Handled = true; 
      } 

      if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.') 
      { 
       e.Handled = true; 
      } 

      // only allow one decimal point 
      if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1) 
      { 
       e.Handled = true; 
      } 
     } 

Welche Art von Veränderung schlagen Sie vor, so dass ich in der Lage sein kann, um ein Zeichen zurückzugehen oder die texbox zu löschen ein einen neuen Wert eingeben ?.

Antwort

1

können Sie Falle für den Backspace (BS) char (8) und, falls gefunden, stellen Sie Ihren Griff auf false gesetzt.

Ihr Code wie folgt aussehen ...

.... 
// only allow one decimal point 
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1) 
{ 
    e.Handled = true; 
} 

if (e.KeyChar == (char)8) 
    e.Handled = false; 

Ein Vorschlag Ihren Code ein bisschen mehr intuitiv zu machen zu interpretieren, was Ihre Event-Handler tut, können Sie eine var erstellen, die die Logik impliziert Sie implementieren. Etwas wie ...

private void txtTransferAmount_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    bool ignoreKeyPress = false; 

    bool matchString = Regex.IsMatch(textBoxTransfer.Text.ToString(), @"\.\d\d"); 

    if (e.KeyChar == '\b') // Always allow a Backspace 
     ignoreKeyPress = false; 
    else if (matchString) 
     ignoreKeyPress = true; 
    else if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.') 
     ignoreKeyPress = true; 
    else if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1) 
     ignoreKeyPress = true;    

    e.Handled = ignoreKeyPress; 
} 
1

Der einfachste Weg wäre:

if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != '\b') 
{ 
    e.Handled = true; 
}