2 Stimmen

Nur gültige Zeichen in einem Windows-Dateisystem in einer TextBox zulassen, die in Windows Forms nur in Großbuchstaben erscheinen kann?

Wie können in einem Windows-Dateisystem nur gültige Zeichen in einer TextBox zugelassen werden, die in Windows Forms nur in Großbuchstaben erscheinen können?

Gibt es dafür eine einfache Möglichkeit?

  1. Über die Menge der in einem Windows-Dateisystem zulässigen Zeichen ( Char.IsLetterOrDigit ist nicht ausreichend)

  2. Wie mache ich die getippten Zeichen zu Großbuchstaben?

5voto

Mitch Wheat Punkte 287474

Erstellen Sie einen Textbox-Tastendruck-Handler und verwenden Sie Path.GetInvalidPathChars() , Path.GetInvalidFileNameChars() um auf ein gültiges Zeichen zu prüfen und die Version in Großbuchstaben zurückzugeben, wenn das Zeichen gültig ist.

   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;
        }
    }

(Natürlich wäre es sinnvoller, eine Methode zu erstellen, anstatt diesen Code direkt in den Handler zu platzieren).

Aktualisiert, um Kommentare zu berücksichtigen.

0 Stimmen

E.KeyChar = Char.ToUpper(e.KeyChar); funktioniert jedoch nicht. Ich habe die Eigenschaft "CharacterCasing" aus der vorherigen Antwort verwendet.

1 Stimmen

Ich würde gerne eine kleine Änderung vorschlagen. Wenn Sie dem Benutzer erlauben wollen, die Rücktaste und andere Steuerzeichen zu verwenden, sollten Sie in Ihrer Bedingung auf Char.IsControl(e.KeyChar) prüfen

0 Stimmen

Stimmt, aber wie soll der Benutzer einen Fehler korrigieren, wenn das Steuerelement keine Rücktaste akzeptiert? Dies wurde mir erst klar, als ich Ihre Lösung heute in einem Projekt verwendete und beim Testen nicht weiterkam, weil ich die Rücktaste nicht verwenden konnte. Ich musste eine Kombination aus Pfeiltasten und Löschen verwenden, was zwar funktionierte, aber nicht besonders benutzerfreundlich war.

2voto

Ivo Punkte 21

Hier ist meine Lösung. Es funktioniert perfekt für Windows Dateinamen Konvention. Zum Wohl.

 // 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;
            }
        }

0voto

Ein besserer Weg für mich war, das TextChanged-Ereignis ala zu verwenden:

this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);

...

private void textBox1_TextChanged(object sender, EventArgs e)
{
    char[] invalidChars = Path.GetInvalidFileNameChars();
    textBox1.Text = string.Join("", textBox1.Text.Split(invalidChars));
    textBox1.SelectionStart = textBox1.Text.Length + 1;
}

denn ... man braucht die Rücktaste und die Benutzer lieben einfach Copy & Paste ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X