2013-08-27 16 views
5

I tworzenie wielowierszowego TextBox z this Link jego prace lepiej, ale jeśli chcę ustawić licznik TextBox tekstowejMultiline problem WPF TextBox

label1.Content = textBox1.Text.Length;

z powyższej pracy linii w porządku, ale problemem jest to, że po naciśnięciu wprowadź w TextBox licznik zwiększy 2 znaki w liczniku TextBox.

Jak mogę to zrobić, proszę, pomóż mi.

Każda pomoc doceniona!

Odpowiedz

4

Andrey Gordeev jest prawo (+1 dla niego), ale nie zapewnia bezpośredni rozwiązanie problemu. Jeśli sprawdzisz ciąg znaków textBox1.Text za pomocą debuggera, zobaczysz określone znaki \r\n. Z drugiej strony, jeśli chcesz wpłynąć na nich bezpośrednio (np. Przez .Replace), nic nie dostaniesz.

Tak więc praktyczna odpowiedź na twoje pytanie brzmi: polegać na Environment.NewLine. Przykładowy kod:

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

jeśli trzeba tylko jeden znak na „Wejście”, a następnie można tylko obsługiwać zdarzenie PreviewKeyDown na TextBox i wklej następujący Handler:

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

Podobnie jak komentarz. Nie ma specjalnego powodu, aby używać "\ n" inte z Environment.NewLine. W rzeczywistości "\ n" jest "ignorowane" przez większość metod analizy ciągów. Wygląda na to, że OP lubi twoją odpowiedź, mimo że nie może uzyskać tego, czym jest, polegając na "\ n" (licząc liczbę znaków w ciągu bez uwzględnienia nowych linii); powinien polegać na Environment.NewLine. Myślę, że te pomysły powinny być jasne dla przyszłych czytelników. – varocarbas

+1

Jestem co drugi bardziej zdezorientowany: testowałem twój kod i nie działa wcale. Z drugiej strony, co jest logiczne: jak już wspomniano, nie można wpływać na znaki/n za pomocą metody zarządzania ciągami (co robisz w texboksie). W przypadku, gdyby było to możliwe, "efekt wejścia"/nowa linia przestałby obowiązywać, a co nie jest tym, czego chce OP? To dla mnie zbyt dziwne. Ach! Masz nowe +1 po moich wyjaśnieniach !? Hmmm Imponujące! LOL. – varocarbas

0

użyć kodu poniżej zamiast label1.Content = textBox1.Text.Length;

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

Proszę nie zapomnij dodać using System.Text;