2011-01-08 7 views
1

Ich brauche die letzten drei Zeichen von RichTextBox während der Benutzer einen Text in RichTextbox schreibt.Holen Sie die letzten 3 Zeichen während Benutzer eingeben

Ich binde Eigenschaft auf Text-Eigenschaft von RichTextBox von Extended WPF Toolkit.

public string RtbText 
{ 
    get { return _rtbText; } 
    set 
    { 
     _rtbText = value; 
     NotifyPropertyChanged("RtbText"); 
    } 
} 

I Reactive Extensions für .NET (Rx) verwenden und Beobachter auf dem Grundstück machen RtbText

Observable.FromEvent<PropertyChangedEventArgs>(this, "PropertyChanged") 
     .Where(e => e.EventArgs.PropertyName == "RtbText") 
     .Select(_ => this.RtbText) 
     .Where(text => text.Length > 1) 
     .Do(AddSmiles) 
     .Throttle(TimeSpan.FromSeconds(1)) 
     .Subscribe(GetLastThreeChars); 

    private void GetLastThreeChars(string text) 
    { 
     if (text.Length > 3) 
     { 
      string lastThreeChars = text.Substring(text.Length - 2, text.Length); 
     } 
    } 

Aber wenn ich in RichTextbox Eingabe beginnen Ich erhalte diese Ausnahme:

Index und length muss sich auf eine Position innerhalb der Zeichenfolge beziehen.
Parametername: Länge

bei System.String.InternalSubStringWithChecks (Int32 start, Länge Int32, Boolean fAlwaysCopy)
bei System.String.Substring (Int32 start, Int32 Länge)
bei WpfApplication1.MainWindow.GetLastThreeChars (String-Text) in C: \ Benutzer \ Jan \ Dokumente \ Visual Studio 2010 \ Projekte \ C# \ Pokec_Messenger \ ver.beta \ IoC.Get \ Pokec_Messenger \ ver.beta \ Pokec_ Messenger \ WpfApplication1 \ MainWindow.xaml.cs: Zeile 97
bei System.Linq.Observable. <> c
_DisplayClass389`1. <> c_ DisplayClass38b.b _388 (TSource x)

Antwort

1

Dies ist eine andere Form.Welche bekommt alle Zeichen von einer Startposition

bis zum Ende
string lastThreeChars = text.Substring(text.Length - 3); 

vielleicht text.length - 2. Ungeprüfte

2

Wenn text.Length > 3 (sagen, dass es 4 ist), dann:

text.Length - 2 = 2 

Sie sind also Code:

string lastThreeChars = text.Substring(2, 4); 

Diese wird fehlschlagen, wenn Sie nach vier Zeichen in der Teilzeichenfolge fragen, die es außer Reichweite legt.

String.Substring Method (Int32, Int32)

Ruft einen Teil aus dieser Instanz. Die Teilzeichenfolge beginnt an einer angegebenen Zeichenposition und hat eine angegebene Länge.

Zusätzlich sind Ihre Test- und Startposition falsch. Vergessen Sie nicht, dass C# -Arrays und -Strings null indiziert sind. Wenn Sie auf den Fall einer Länge strikt größer als 3 prüfen, verpassen Sie den Fall, wenn der Benutzer genau drei Zeichen eingegeben hat, wenn Sie die gesamte Zeichenfolge zurückgeben möchten.

Ihr Code muss sein:

if (text.Length > 2) 
{ 
    string lastThreeChars = text.Substring(text.Length - 3, 3); 
} 

Wenn Tatsache, dass Sie nicht die Länge angeben müssen:

if (text.Length > 2) 
{ 
    string lastThreeChars = text.Substring(text.Length - 3); 
} 

werden die letzten drei Zeichen in der Zeichenfolge zurück.

Verwandte Themen