RichTextBox
に特定の文字列の開始位置を取得するためにGetPositionFromCharIndex()
を使用していたところがありました。他の要件のために、私はいくつかの単語のフォントサイズを増やすために変更を加えました。単語が拡大してしまうと(そして、同じ位置の文字列が同じままであれば)、私が測定している文字列は押し下げられますが、Y位置は何らかの理由で同じものとして読み込まれます。同じ行の大きなテキストのために、RichTextBoxでシフトダウンされるテキストの位置を取得するにはどうすればよいですか?
私はこれを確認するためのクイックテストアプリを作成し、それを複製することができます。以下は、私が使用しているすべてのコードです(もちろんデザイナーは別です)。
public Form1()
{
InitializeComponent();
richTextBox1.Text = "Test statement";
//Select "Test" and increase the size
richTextBox1.SelectionStart = richTextBox1.Text.IndexOf("Test");
richTextBox1.SelectionLength = 4;
richTextBox1.SelectionFont = new Font(richTextBox1.Font.FontFamily, 16);
Point test = richTextBox1.GetPositionFromCharIndex(richTextBox1.Text.IndexOf("Test"));
Point statement = richTextBox1.GetPositionFromCharIndex(richTextBox1.Text.IndexOf("statement"));
//"statement" is pushed down due to "Test" being enlarged,
//Yet the Y value is the same for both words
label1.Text = $"Test location: {test.X},{test.Y}";
label2.Text = $"statement location: {statement.X},{statement.Y}";
}
これは、私は周りを取得できるものですか?明らかに「ステートメント」という単語はであり、実際にはのY値は同じではありません。 RichTextBox
のように思えますが、その言葉はその高さから始まりますので、それを測るだけですが、そうであれば私には明らかな解決策はないようです。
あなたは一歩踏み出し、達成しようとしている問題点を説明できますか? – mjwills
@mjwills - 特定の単語の境界を記録し、ホバーイベントでそれらの境界をチェックします。カーソルがその範囲を超えている場合、その単語をクリック可能にしたい(別名、カーソルを手に変更する)。だから私の例では、 "ステートメント"はクリック可能な単語にする必要があります、私はそれを上に移動し、まだ手を得る場合はちょっと面白いように見えます。 –