2009-03-05 6 views
1

Voici le code en C# pour permettre un seul point décimal dans une zone de texte:Comment puis-je autoriser seulement un point décimal dans une zone de texte?

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

je dois l'utiliser dans la version VB.NET 2003, mais je ne peux pas utiliser la propriété contient. Comment puis-je faire ceci?

+1

renu, S'il vous plaît choisir une réponse acceptée. ;) – Raithlin

+0

Renu est parti :((ou: :-)?) – TheBlastOne

Répondre

4

Pourquoi ne pas utiliser la méthode Text.IndexOf(".") à la place? Si elle renvoie> = 0 alors vous avez déjà un point décimal.

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

merci beaucoup ..... il a vraiment travaillé .. –

+2

ren, je vais vous demander d'aller de l'avant et marquer cette réponse acceptée, 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

Prenez soin d'ajouter des commentaires à votre code, ce qu'il fait, pourquoi, comment? – Yaroslav

+1

-1. Mauvaise technologie (Java), encore moins le langage. – tomfanning

2

Ne pas oublier locale de l'utilisateur et les formats numériques. Je crois que l'utilisation d'une période ('.') Comme caractère décimal est minoritaire dans le monde entier. Vous pouvez utiliser le champ NumberFormat de CurrentUICulture pour vous aider à analyser la manière la plus correcte. Essayez d'utiliser:

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

Cela validera si un nombre a été entré correctement. En utilisant d'autres indicateurs NumberStyles, vous pouvez contrôler les types de numéros que vous souhaitez autoriser, par exemple des éléments tels que des séparateurs de milliers.

* Désolé pour C# ici. VB.NET devrait être facile à adapter de ceci cependant; peut-être une sorte d'âme peut l'éditer.

+1

C'est une manière beaucoup plus robuste d'écrire le même code. – tomfanning