2013-08-27 4 views
5

ich mehrzeilige TextBox mit this Link seine Arbeit besser zu schaffen, aber wenn ich will TextBox Text Zählermehrzeilige Ausgabe WPF TextBox

label1.Content = textBox1.Text.Length;

mit über der Linie funktionieren setzen, aber Problem, dass, wenn ich die Eingabetaste drücken in der TextBox Zähler erhöht 2 Zeichen in TextBox Zähler.

Wie kann ich diese Aufgabe tun, bitte helfen Sie mir.

Jede Hilfe wird geschätzt!

Antwort

4

Andrey Gordeev Antwort ist richtig (+1 für ihn) aber keine direkte Lösung für Ihr Problem. Wenn Sie die textBox1.Text Zeichenfolge mit dem Debugger überprüfen, würden Sie die verwiesenen \r\n Zeichen sehen. Auf der anderen Seite, wenn Sie beabsichtigen, sie direkt zu beeinflussen (zum Beispiel über .Replace), würden Sie nichts bekommen.

So lautet die praktische Antwort auf Ihre Frage: Verlassen Sie sich auf Environment.NewLine. Beispielcode:

label1.Content = textBox1.Text.Replace(Environment.NewLine, "").Length; 
3

, wenn Sie nur ein Zeichen müssen auf „Enter“, dann können Sie nur PreviewKeyDown Ereignis auf TextBox behandeln und folgende Prozedur ein:

private void Txt_OnPreviewKeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      var txtBox = e.Source as TextBox; 
      var selectionStart = txtBox.SelectionStart; 
      txtBox.Text = txtBox.Text.Insert(selectionStart, "\n"); 
      txtBox.Select(selectionStart + 1, 0); 
      e.Handled = true; 
     } 
    } 
+0

wie ein Kommentar. Es gibt keinen besonderen Grund, "\ n" von Environment.NewLine zu verwenden. Tatsächlich wird "\ n" von den meisten String-Analysemethoden "ignoriert". Anscheinend mag das OP Ihre Antwort, obwohl er nicht das bekommt, wonach er sucht, indem er sich auf "\ n" verlässt (die Anzahl der Zeichen in einer Zeichenkette zählt, ohne neue Zeilen zu berücksichtigen); Er sollte sich auf Environment.NewLine verlassen. Ich denke, dass diese Ideen für zukünftige Leser klar sein sollten. – varocarbas

+1

Ich bin jede Sekunde mehr verwirrt: Ich habe deinen Code getestet und funktioniert überhaupt nicht. Was logisch ist, auf der anderen Seite: Wie gesagt, Sie können die/n Zeichen nicht über die String-Management-Methode beeinflussen (was Sie in der Texbox tun). Sollte dies möglich sein, wäre der "Enter-Effekt"/die neue Zeile verschwunden, was will das OP sowieso nicht? Das ist viel zu komisch für mich. Ah! Du hast nach meinen Erklärungen ein neues +1 bekommen !? Hmmm Beeindruckend! LOL. – varocarbas

0

den Code unten benutzen statt label1.Content = textBox1.Text.Length;

label1.Text = textBox1.Text.Replace(Environment.NewLine, "").Length.ToString(); 

Bitte vergessen Sie nicht, hinzuzufügen using System.Text;