Eine nicht behandelte Ausnahme des Typs 'System.StackOverflowException " ist in System.Windows.Forms.dll
OK, ich versuche zu markieren Schlüsselwörter in einem richtextbox-Steuerelement, das problem ist ich habe den code zu markieren, wird nur der sichtbare text auf textChanged-Ereignis,so dass ich versuchte, setzen Sie den code in der richtextbox-VScroll, wenn ich also hochgescrollt es würde den text markieren, der nicht erkennbar war, bevor, aber jedes mal, wenn ich anfange zu scrollen, bekomme ich diese Fehlermeldung: "Eine nicht behandelte Ausnahme des Typs 'System.StackOverflowException "ist in System.Windows.Forms.dll" Hat jemand wissen, warum? Oder vielleicht eine Möglichkeit, ich könnte markieren Sie die Wörter, die sich beim scrollen?
Danke, Tanner.
int selectionstart = richTextBox1.Selectionstart;
int topIndex = richTextBox1.GetCharIndexFromPosition(new Point(1, 1));//This is where I get the error.
int bottomIndex = richTextBox1.GetCharIndexFromPosition(new Point(1, richTextBox1.Height - 1));
int topLine = richTextBox1.GetLineFromCharIndex(topIndex);
int bottomLine = richTextBox1.GetLineFromCharIndex(bottomIndex);
int start = richTextBox1.GetFirstCharIndexFromLine(topLine);
int end = richTextBox1.GetFirstCharIndexFromLine(bottomLine);
int numLinesDisplayed = (bottomLine - topLine) + 2;
richTextBox1.Focus();
richTextBox1.Select(start, end);
- Allgemeiner Tipp: stack-overflows sind fast immer verursacht durch eine unendliche Rekursion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist wahrscheinlich die Auslösung der VScroll Ereignis durch diesen code, so dass Ihr code aufgerufen wird, wieder auf und löst dann das Ereignis wieder, und wird erneut aufgerufen, und so weiter, und so am Ende Ihren stack endet.
Erzählen, genauer gesagt, ich muss sehen, dass Sie Ihre call-stack im moment der Ausnahme.
Fast sicher eine Ereignis-Schleife. Wahrscheinlich richTextBox1.wählen Sie () - Aufruf die Ursache für das widget, um zu versuchen, um zu Blättern, welche Probleme ein neues VScroll Ereignis, ad infinitum (oder ad-stack-Speicher). Es gibt verschiedene Möglichkeiten, dies zu behandeln, aber die einfachste ist in der Regel ein flag zu setzen, auf das erste mal durch die Veranstaltung, dann wickeln Sie in Ihrem code eine bedingte, so dass es nur ausgeführt wird, wenn die flag nicht gesetzt ist.
Ok, was brauchst du genau sehen? Hier ist mein vollständiger code: