none
RichTextBox.Find wirft ArgumentOutOfRangeException

    Frage

  • Hallo,

    ich lade in eine Windows.Forms.RichTextBox einen RTF-Text, der eine Tabelle enthält (zwei Spalten und zwei Zeilen, mit Microsoft Word erstellt). In den vier Zellen steht z.B. a, b, c, d.

    richTextBox1.Rtf = File.ReadAllText("RtfTest.rtf");
    int index = richTextBox1.Find("c");

    Die Suche nach a und b funktioniert noch, aber der Index ist falsch. Bei der Suche nach c oder d, oder nach Text, der nach der Tabelle kommt, wird eine System.ArgumentOutOfRangeException geworfen: "startIndex darf nicht länger als die Länge der Zeichenfolge sein. Parametername startIndex'.

    Das Problem tritt nur in Windows 10 auf und wenn das Target Framework der Assembly .NET Framework 4.7 oder 4.7.1 ist.
    Unter Windows 7 tritt die Exception nicht auf. (Win 8.1 nicht getestet)

    Alles was ich bisher dazu gefunden habe, ist ein Schalter in der app.config.

    <runtime>
    	<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl=true"/>
    </runtime>
    

    Damit funktioniert das Testprogramm. Allerdings greift dieser Schalter nicht, wenn, wie in meinem Fall die RichTextBox in einer Drittanbieter DLL vererbt wird.

    Kennt jemand dieses Problem?

    Viele Grüße, Ingo

    Freitag, 13. April 2018 13:54

Alle Antworten

  • Hallo Ingo,

    Hast Du den Lösungsansatz in diesem Thread gefunden? Ich möchte Dich noch auf Cor Ligtherts Antwort hinweisen, in der er einen Bug andeutet. Die für das Berichten von Bugs vorgesehene Webseite Microsoft Connect wurde zwar zurückgezogen, aber über die in Visual Studio 2017 integrierte Option Report a Problem kannst Du den Bericht übermitteln.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 16. April 2018 10:12
    Moderator
  • Hallo Dimitar,

    ja, den anderen Thread habe ich gefunden. Über Sysinternals listdlls lässt sich nachvollziehen, dass mit dem runtime-Switch in der .config entweder das alte oder ein neueres RichEdit Control geladen wird. Allerdings wäre es ja trotzdem schön, wenn das Neue funktionieren würde.

    Ich werde es mal über ein Visual Studio Feedback versuchen.
    Danke für den Tipp.

    Viele Grüße,
    Ingo

    Montag, 16. April 2018 17:36