2013-08-27 7 views
5

ho creando multilinea TextBox con this Link il suo lavoro migliore, ma se voglio impostare contatore TextBox testoproblema multilinea WPF TextBox

label1.Content = textBox1.Text.Length;

con sopra lavoro linea sottile ma il problema è che quando si preme entrare nel TextBox Contattalo aumenterà 2 caratteri nel contatore TextBox.

Come posso eseguire questa operazione, per favore aiutatemi.

Qualsiasi aiuto apprezzato!

risposta

4

Andrey Gordeev è giusto (+1 per lui), ma non fornisce una soluzione diretta per il vostro problema. Se si controlla la stringa textBox1.Text con il debugger, si vedrebbero i caratteri \r\n indicati. D'altra parte, se si intende influire direttamente su di essi (tramite .Replace, ad esempio), non si otterrà nulla.

Quindi, la risposta pratica alla tua domanda è: fare affidamento su Environment.NewLine. Esempio di codice:

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

se avete bisogno di un solo carattere su "Enter", allora si può solo gestire l'evento PreviewKeyDown su TextBox e incollare seguente gestore:

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

Proprio come un commento. Non vi è alcun motivo speciale per utilizzare "\ n" in ambiente Environment.NewLine. In realtà, "\ n" è "ignorato" dalla maggior parte dei metodi di analisi delle stringhe. Apparentemente, all'OP piace la tua risposta, anche se non riesce a ottenere quello che sta facendo affidandosi a "\ n" (contando il numero di caratteri in una stringa senza considerare quelli della nuova linea); dovrebbe fare affidamento su Environment.NewLine. Penso che queste idee dovrebbero essere chiarite per i futuri lettori. – varocarbas

+1

Sono ogni secondo più confuso: ho testato il tuo codice e non funziona affatto. Ciò che è logico, d'altra parte: come detto non puoi influenzare i caratteri/n tramite il metodo di gestione delle stringhe (cosa stai facendo nella texbox). In caso di poterlo fare, l'effetto "entra in effetto"/la nuova riga sarebbe scomparso, cosa non è ciò che l'OP vuole, comunque ?! Questo è troppo strano, per me. Ah! Hai un nuovo +1 dopo le mie spiegazioni !? Hmmm Impressionante! LOL. – varocarbas

0

utilizzare il codice qui sotto, invece di label1.Content = textBox1.Text.Length;

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

Si prega di non dimenticare di aggiungere using System.Text;