Browse Source

Fixed ArgumentOutOfRangeException in SearchResultNode.ActivateItem.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4995 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
9865f6a922
  1. 6
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs
  2. 26
      src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs

6
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs

@ -54,6 +54,12 @@ namespace ICSharpCode.AvalonEdit.AddIn
#region ITextMarkerService #region ITextMarkerService
public ITextMarker Create(int startOffset, int length) public ITextMarker Create(int startOffset, int length)
{ {
int textLength = codeEditor.Document.TextLength;
if (startOffset < 0 || startOffset > textLength)
throw new ArgumentOutOfRangeException("startOffset", startOffset, "Value must be between 0 and " + textLength);
if (length < 0 || startOffset + length > textLength)
throw new ArgumentOutOfRangeException("length", length, "length must not be negative and startOffset+length must not be after the end of the document");
TextMarker m = new TextMarker(this, startOffset, length); TextMarker m = new TextMarker(this, startOffset, length);
markers.Add(m); markers.Add(m);
// no need to mark segment for redraw: the text marker is invisible until a property is set // no need to mark segment for redraw: the text marker is invisible until a property is set

26
src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs

@ -116,15 +116,23 @@ namespace SearchAndReplace
if (provider != null) { if (provider != null) {
ITextMarkerService markerService = provider.TextEditor.GetService(typeof(ITextMarkerService)) as ITextMarkerService; ITextMarkerService markerService = provider.TextEditor.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
if (markerService != null) { if (markerService != null) {
ITextMarker marker = markerService.Create(provider.TextEditor.Document.PositionToOffset(lineNumber, column), result.Length); ITextMarker marker = null;
marker.BackgroundColor = Colors.Orange; try {
marker.Tag = this; marker = markerService.Create(provider.TextEditor.Document.PositionToOffset(lineNumber, column), result.Length);
EventHandler remover = null; } catch (ArgumentOutOfRangeException) {
remover = (sender, e) => { // can happen if lineNumber/column is after the end of the document; or if
marker.Delete(); // result.Length is too long
provider.TextEditor.Caret.PositionChanged -= remover; }
}; if (marker != null) {
provider.TextEditor.Caret.PositionChanged += remover; marker.BackgroundColor = Colors.Orange;
marker.Tag = this;
EventHandler remover = null;
remover = (sender, e) => {
marker.Delete();
provider.TextEditor.Caret.PositionChanged -= remover;
};
provider.TextEditor.Caret.PositionChanged += remover;
}
} }
} }
} }

Loading…
Cancel
Save