2017-05-15 2 views
0

Die folgende Methode muss erfolgreich eine Benutzereingabe vornehmen und ihre Eingabe in Titelformat ändern, z. B. Großbuchstaben am Anfang jedes Worts, während sie eingegeben werden. Dies wird in ein Textfeld in einem WinForm-Projekt eingegeben. Ich habe ein Problem mit dieser Methode, da es richtig konvertiert, bis ich Caps sperren oder verschieben. Es wird auch funktionieren, wenn ich beide Tasten gedrückt halte, um nicht sicher zu sein, ob sich das einfach aufhebt. Ich habe Regex untersucht, aber nicht sicher, wie man es in dieser Klasse implementiert. Den Code für die Funktion finden Sie im Voraus.Konvertierung in TitleCase mit Feststelltaste & Shift gedrückt?

// User input stored in Temp Var 
string myText = tbProductId.Text; 

// 
if (myText.Equals(null)) 
{ 
    // validation, check if the user has entered anything, if Null. 
    MessageBox.Show("Please enter somthing"); 
} 
else 
{ 
    // convert to Title Case 
    tbProductId.Text = System.Threading.Thread.CurrentThread.CurrentCulture.TextInf‌​o.ToTitleCase(tbProd‌​uctId.Text); 
    tbProductId.Focus(); 
    tbProductId.Select(tbProductId.Text.Length, 0); 
    //Move Cursor to location of where error was found 
} 
+0

Es gibt mehrere Ansätze dazu. Zwei solche: Überwachen Sie ihre Eingabe auf Zeichen-für-Zeichen-Basis und konvertieren Sie Buchstaben in Groß- oder Kleinbuchstaben, je nachdem, ob es sich um das erste oder um ein Leerzeichen handelt. oder warte bis zum Ende und führe die ganze Kette durch einen [Konverter] (http://stackoverflow.com/questions/913090/how-to-capitali-the-first-character-of-each-word-or-the- first-of-a), um es in das richtige Format zu ändern. – Abion47

+0

Sie könnten auch an der Klasse ['Keyboard'] (https://msdn.microsoft.com/en-us/library/system.windows.input.keyboard (v = vs.110) .aspx) interessiert sein. – Abion47

+0

Der einfachste: 'tbProductId.Text = System.Threading.Thread.CurrentThread.CurrentCulture.TextInf o.ToTitleCase (tbProd uctId.Text.ToLower());'. Es konvertiert zuerst alles in Kleinbuchstaben und gibt dann den Titel als Ergebnis zurück. –

Antwort

0

Sie können einfach verwenden:

tbProd‌​uctId.CharacterCasing = CharacterCasing.Lower 

Die Verhaltensweisen, die Sie ist Standard erklärt pro die docs korrekt ist, und dies ist der einfach Weg drum herum.

Ich stimme auch mit dem Kommentar oben von @Tetsuya Yamamoto

+0

@DigvijayThanks für Ihre Kommentare Ihre Werke vor Ort auf auch Prost – whatdoyouNeedFromMe

+0

froh, ich könnte helfen! – Digvijay

0

Endergebnis und Antwort dank der Menschen, die über

geschrieben
 // User input stored in Temp Var 
     string myText = tbProductId.Text; 
     var regex = new Regex(@"[^a-zA-Z0-9\s]"); 

     if (myText.Equals("") ||(regex.IsMatch(myText.ToString()))) 
     { 
      MessageBox.Show("Please enter a Valid value no special chars or leaving this blank!!!!"); 
     } 

     else 
     { 
      tbProductId.Text = System.Threading.Thread.CurrentThread.CurrentCulture.TextInf‌​‌​o.ToTitleCase(tbPr‌​od‌​uctId.Text.ToLow‌​er()); 
      tbProductId.Focus(); 
      tbProductId.Select(tbProductId.Text.Length, 0); 
      //Move Cursor to location of where error 

}

0

Char für char ...

public void textBox1_Click(Object ob, EventArgs eventArgs){ 
     if (textBox1.Text.Length > 0) 
     { 
      string text = textBox1.Text; 
      string tmpText = ""; 

      if (textBox1.Text.Length == 1) 
      { 
       tmpText = text.ToUpper(); 
      } 
      else 
      { 
       for (int i = 0; i < text.Length; i++) 
       { 
        if (i < text.Length - 1) 
         tmpText += text[i]; 
        else if (text[text.Length - 2] == ' ') 
         tmpText += text[text.Length - 1].ToString().ToUpper(); 
        else 
         tmpText += text[i]; 
       } 
      } 
      textBox1.Text = tmpText; 
      textBox1.Focus(); 
      textBox1.Select(textBox1.Text.Length, 0); 
     } 
    } 
Verwandte Themen