2011-09-06 1772 views
0

我自定義繪製一個文本框,現在我正在實現用戶可以點擊一行並將光標移動到他點擊的位置的部分。獲取基於像素偏移的字符串索引

我知道如何獲得他點擊的文本行,因爲字符高度在所有字體中是恆定的,但不是列,因爲我不知道如何說「讓我把所有可以繪製的文本在像素數量之前「,並且因爲字符寬度不一致,除非您使用固定寬度的字體,這不是保證。

所以我有點從我繪製字符串(0),然後我有點用戶點擊。我如何獲得他們點擊的字符的字符串索引?

其他信息:我通過將行存儲在List中然後迭代列表並在每行上使用Graphics.DrawString來繪製文本。

回答

1

沒有簡單的方法在像素中查找字符。

但是,您可以找到字符串將填充的像素。使用Graphics.MeasureCharacterRanges方法。您可以對字符串執行二分搜索,直到找到MeasureCharacterRanges返回光標位置的字符串。

注:您可能會看到Graphics.MeasureString方法和被誘惑使用。別!該方法不會返回準確的測量結果。我不記得爲什麼,但如果你嘗試,你會做你的頭!

+0

是否所有的文本編輯都必須這樣做?也就是說,RichTextBox是這樣做的嗎?看起來很駭人。 –

+0

RichTextBox有一個GetCharFromPosition方法。這使用本機窗口API消息來獲取字符索引。 –

+0

有什麼方法可以使用它?基礎API消息如何做到這一點? –

相關問題