我創建了一個用於在RichTextBox中進行搜索的無模式查找對話框,並且在找到的文本被選中後無法定位查找對話框,以致它沒有覆蓋所選文本。我曾嘗試使用來獲得相對於客戶區的行號以下內容:如何將查找對話框定位爲不覆蓋找到的文本?
this.lineCount = this.rtb.Height/(this.rtb.Font.Height+2);
rtb.Select(rtbIndex, searchText.Length);
int linePos = (this.rtb.GetLineFromCharIndex(this.rtb.GetFirstCharIndexOfCurrentLine())) % this.lineCount;
if(linePos<(this.lineCount/2))
{
this.Location = rtb.PointToScreen(new Point(rtb.Bounds.Left, rtb.Bounds.Bottom - this.Height));
}
else
{
this.Location = rtb.PointToScreen(new Point(rtb.Bounds.Left, rtb.Bounds.Top));
}
this.lineCount是適合基於字體高度和RichTextBox的高度客戶區的行數。這是我已經驗證的準確值。如果lineNum小於this.lineCount的一半,我的代碼將查找對話框定位在richtextbox的底部,否則在頂部
Hoewever,linePos不可靠。當選定文本的行是第19行,lineCount是20時,它有時會有一個零值,所以對話框會移到選定的文本上。因此,它不能可靠地計算richtextbox顯示選定文本的位置。
你有很好的答案,但沒有關閉你的線程得到它。你需要的東西? – 2010-08-18 21:38:16