2016-01-19 1 views
3

я не понимаю, почему position=0 вместо position=-1C# RichTextBox Найти() Ошибка?

RichTextBox.Text = "aaa"; 
int position = RichTextBox.Find("a", 3, 3, RichTextBoxFinds.None); 

И position=-1 если

RichTextBox.Text = "aaa"; 
int position = RichTextBox.Find("aa", 2, 3, RichTextBoxFinds.None); 

ответ

4

Нет, это не ошибка, но я бы сказал, что документация может быть быть написано, как вы должны копать для получения необходимой информации.

После некоторого игры вокруг него, очевидно, что правила заключаются в следующем:

  1. start и end значения равны нулю на основе индексов, поэтому, когда вы положили 3, то вы просите его, чтобы начать в характера, которого не существует.

  2. Если вы указали оба start и end, чтобы иметь то же значение, то весь текст ищется, как указано в documentation.


Используя ваши примеры конкретно:

RichTextBox.Text = "aaa"; 
int position = RichTextBox.Find("a", 3, 3, RichTextBoxFinds.None); 

В нулевой индексирование, 3 и 3 оба больше, чем фактическая длина текста, так что вы пытаетесь начать с характера, которого не существует. Однако, поскольку вы использовали 3 как для start, так и для end, вы удовлетворяете 2-й точке выше, поскольку текст всего будет искать, поэтому вы получаете совпадение в позиции 0 (первое вхождение).

RichTextBox.Text = "aaa"; 
int position = RichTextBox.Find("aa", 2, 3, RichTextBoxFinds.None); 

Здесь вы сказать это start на последнем символе, и как вы будете искать для 2-х символов, он не может соответствовать, так что вы получите -1 как результат ..

Так что ваши результаты, как и ожидалось.

+1

Если документация не покрывает его, это __is__ ошибка и, конечно, не так, как ожидалось. Является ли ошибка в документах или в поведении, которое я не знаю, но обертывание довольно __crazy__ imo, мягко говоря, поэтому я называю это ошибкой __bug__, __BUG__ ;-). Документ [doc] (https://msdn.microsoft.com/de-de/library/yab8wkhy%28v=vs.110%29.aspx) говорит, что @Graham отмечает: _ Когда начальные и конечные параметры предоставляются, то же значение, что и весь элемент управления, ищет обычный поиск_, так что это __not wrap around__, просто странно .. – TaW

+0

@TaW: Кажется, вы правы, что не обертывались, я был уверен, что доказал, что вчера тестировал wen, но я теперь, похоже, это не так, должно быть, была моей ошибкой. Я обновлю свой ответ – musefan

+0

ok, thx для вашего ответа. но если start> = RichTextBox.Length, зачем возвращать 0? – GRUNGER

 Смежные вопросы

  • Нет связанных вопросов^_^