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 @@ -54,6 +54,12 @@ namespace ICSharpCode.AvalonEdit.AddIn
#region ITextMarkerService
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);
markers.Add(m);
// 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 @@ -116,15 +116,23 @@ namespace SearchAndReplace
if (provider != null) {
ITextMarkerService markerService = provider.TextEditor.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
if (markerService != null) {
ITextMarker marker = markerService.Create(provider.TextEditor.Document.PositionToOffset(lineNumber, column), result.Length);
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;
ITextMarker marker = null;
try {
marker = markerService.Create(provider.TextEditor.Document.PositionToOffset(lineNumber, column), result.Length);
} catch (ArgumentOutOfRangeException) {
// can happen if lineNumber/column is after the end of the document; or if
// result.Length is too long
}
if (marker != null) {
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