2010-02-04 3 views
1

Comment seuls les caractères valides peuvent-ils être autorisés dans un système de fichiers Windows dans un TextBox qui ne peut apparaître qu'en majuscules dans Windows Forms?Autoriser uniquement les caractères valides dans un système de fichiers Windows dans une zone de texte qui peut uniquement apparaître en majuscules dans Windows Forms?

Existe-t-il un moyen facile pour cela?

  1. A propos de l'ensemble de caractères autorisés dans un système de fichiers Windows (Char.IsLetterOrDigit ne suffit pas)

  2. Comment puis-je faire les caractères tapés en majuscules?

Répondre

3

Créer un gestionnaire de presse touche TextBox et Path.GetInvalidPathChars() Utilisez, Path.GetInvalidFileNameChars() pour vérifier char valide et retourner la version majuscule si le caractère est valide.

textBox1.CharacterCasing = CharacterCasing.Upper; 

    ... 

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (Path.GetInvalidFileNameChars().Contains(e.KeyChar) || 
      Path.GetInvalidPathChars().Contains(e.KeyChar)) 
     { 
      e.Handled = true; 
     } 
    } 

[Bien sûr, il serait plus réutilisable pour créer une méthode plutôt que de placer ce code directement dans le gestionnaire.]

mis à jour pour tenir compte des commentaires.

+0

Ce. Plus un ... – Pierreten

+0

e.KeyChar = Char.ToUpper (e.KeyChar); ne fonctionne pas bien. J'ai utilisé la propriété CharacterCasing de la réponse précédente. –

+1

Je voudrais suggérer un changement mineur. Si vous voulez permettre à l'utilisateur d'utiliser le retour arrière et d'autres caractères de contrôle, vous devriez vérifier Char.IsControl (e.KeyChar) dans votre condition – Wheelie

1

Voici ma solution. Cela fonctionne parfaitement pour la convention des noms de fichiers Windows. À votre santé.

// Prevent user from wrong input - \/:*?"<>| 
     private void textBoxMP3Name_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"[^?:\\/:*?\""<>|]"))                       
      {                   
       e.Handled = true; 
      } 
     } 
Questions connexes