2009-03-05 5 views
1

Hier ist der Code in C# nur eine Dezimalstelle in einem Textfeld zu ermöglichen:Wie kann ich nur eine Dezimalstelle in einem Textfeld zulassen?

if textbox5.text.contains(".") && e.keychar="." 
{ 
e.handled=true 
} 

Ich habe es Version in VB.NET 2003 zu verwenden, aber ich kann die Eigenschaft enthält nicht verwenden. Wie kann ich das machen?

+1

renu, Bitte wählen Sie eine angenommene Antwort. ;) – Raithlin

+0

Renu ist weg :((oder: :-)?) – TheBlastOne

Antwort

4

Wie wäre es stattdessen mit der Methode ? Wenn es> = 0 zurückgibt, haben Sie bereits einen Dezimalpunkt.

If (textbox5.Text.IndexOf(".") >= 0 And e.KeyChar = ".") Then e.Handled = True 
+0

danke viel ..... es hat wirklich funktioniert .. –

+2

ren, ich werde dich bitten, voran zu gehen und dies die akzeptierte Antwort zu markieren, mkay. – Marcus

-2
package Utility 
{ 

    import flash.events.Event; 

    import flashx.textLayout.operations.PasteOperation; 

    import spark.components.TextInput; 
    import spark.events.TextOperationEvent; 

    /** 
    * This is a text input component that can only input numbers. 
    * A number means a real number. 
    * @author Cheng Liang 
    * @version 0.0.1 
    */ 
    public class NumberInput extends TextInput 
    { 

     [Bindable("numberChange")] 
     /** 
     * Sets number as input value. 
     */ 
     public function set number(value : Number) : void 
     { 
      var s : String = value.toString(); 
      if(text != s) { 
       text = s; 
       dispatchEvent(new Event("numberChange")); 
      } 
     } 

     public function get number() : Number 
     { 
      return Number(text); 
     } 

     public function NumberInput() 
     { 
      super(); 
      this.addEventListener(TextOperationEvent.CHANGE, onTextChange); 
     } 

     protected function onTextChange(event : TextOperationEvent) : void 
     { 

      if (event.operation is PasteOperation) 
      { 
       TextInput(event.currentTarget).text=''; 
      } 

      if(text == "" || text.length == 1) { 
       return; 
      } 

      /* To allow single (.) */ 
      var idx : int = text.indexOf(".", 0); 
      if(idx >= 0) { 
       text = text.substring(0, idx + 1) + text.substring(idx + 1).replace(".", ""); 
      } 

      /* To allow single (-) only at the 1st position*/ 
      if(text.lastIndexOf("-")==0) 
       text ='-'+ text.substring(1); 
      else if(text.lastIndexOf("-")>0) 
      { 
       if(text.charAt(0)=='-') 
        text ='-'+ text.substring(1).replace("-", ""); 
       else 
        text =text.replace("-", ""); 
      } 

      var arr:Array = TextInput(event.currentTarget).text.split("."); 
      try{ 
       if(arr[1] && String(arr[1]).length > 2){       
        TextInput(event.currentTarget).text = arr[0]+"."+String(arr[1]).slice(0,2); 
       } 
      }catch(err:Error){} 

      this.selectRange((text.length), (text.length)); 
     } 
    } 
} 
+1

Achten Sie darauf, Ihrem Code einige Kommentare hinzuzufügen, was er tut, warum, wie? – Yaroslav

+1

-1. Falsche Technologie (Java), geschweige denn Sprache. – tomfanning

2

Vergessen Sie nicht, über die locale und Zahlenformate des Benutzers. Ich glaube, dass die Verwendung eines Punktes ('.') Als Dezimalzeichen weltweit in der Minderheit ist. Sie können CurrentUICulture 's NumberFormat Feld verwenden, um Ihnen zu helfen, am richtigsten zu analysieren. Verwenden Sie:

decimal d; 
bool isValidInput = decimal.TryParse(
    textBox1.Text, 
    System.Globalization.NumberStyles.AllowDecimalPoint, 
    System.Globalization.CultureInfo.CurrentUICulture.NumberFormat, 
    out d); 

Dies überprüft, ob eine Nummer richtig eingegeben wurde. Mit anderen NumberStyles Flags können Sie steuern, welche Arten von Zahlen Sie zulassen möchten, zum Beispiel Dinge wie Tausendertrennzeichen.

* Sorry für C# hier. VB.NET sollte sich jedoch leicht davon anpassen lassen; vielleicht kann eine Art Seele es in bearbeiten.

+1

Dies ist eine viel robustere Möglichkeit, denselben Code zu schreiben. – tomfanning

Verwandte Themen