2016-01-19 55 views
3

我不明白爲什麼position=0代替position=-1C#RichTextBox Find()Bug?

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. startend值是零基礎的指標,所以當你把3然後你問它在開始不存在的字符。

  2. 如果同時指定startend是相同的值,那麼整個文本中搜索作爲在documentation規定。


使用你的例子具體爲:

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

在從零開始的索引,33都比文本的實際長度越大,所以你想開始一個不存在的字符。但是,因爲startend都使用3,所以您滿足上面的第二點,因爲整個文本將被搜索,這就是爲什麼您在位置0(第一次出現)獲得匹配的原因。

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

在這裏,你告訴它start在最後一個字符,併爲您搜索2個字符不能匹配,所以你得到-1的結果..

所以你得到的結果如預期。

+1

如果文檔沒有覆蓋它,它__是一個錯誤,當然不是預期的。無論是在文檔中還是在行爲中,我都不知道,但是換個角度相當__crazy__ imo,說得很溫和,所以我把它叫做bug,__bug__,__BUG__ ;-)。 [doc](https://msdn.microsoft.com/de-de/library/yab8wkhy%28v=vs.110%29.aspx)確實會這麼說,正如@Graham指出的那樣:_提供開始和結束參數時相同的價值整個控制搜索正常的搜索_,所以它是__not環繞_,只是很奇怪.. – TaW

+0

@TaW:似乎你是不是環繞包裝,我確信我證明它是昨天測試,但我似乎無法做到這一點,所以一定是我的錯誤。我會更新我的回答 – musefan

+0

好的,thx爲您的答案。但如果開始> = RichTextBox.Length,爲什麼返回0? – GRUNGER