由于同一行上的文本较大,如何获取RichTextBox中向下移动的文本的位置?

时间:2017-07-25 21:48:04

标签: c# richtextbox

有一点,我使用GetPositionFromCharIndex()来获取RichTextBox中特定字符串开头的位置。由于其他要求,我做了一些更改以增加某些单词的字体大小。如果一个单词恰好被放大(并且我想要的位置保持相同的字符串),我正在测量的字符串被按下但是由于某种原因Y位置读取相同。

我写了一个快速测试应用来验证这一点并可以复制它。下面是我正在使用的所有代码(当然除了设计师)。

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}";
}  

结果截图:
String position measure results

这是我可以解决的问题吗?显然,“声明”一词并非真正具有相同的Y值。似乎就RichTextBox而言,这个词确实启动得那么高,所以它只是测量它,但如果是这样的话,似乎没有一个明显的解决方案给我。

1 个答案:

答案 0 :(得分:1)

GetPositionFromCharIndex正在使用as designed

文档声明:

  

此方法使您可以确定控件中特定的位置   字符索引位于。您可以将此方法用于此类任务   显示快捷菜单项或帮助信息   控制。例如,如果要显示选项菜单   当用户右键单击控件中的单词时,用户即可   使用此方法可以正确确定单词的位置   显示ContextMenu控件。

鉴于此,两个单词返回相同的Y值是有意义的 - 因为您希望右键单击以对两个单词执行一致操作(因此即使您在语句上方右键单击也是如此它仍然可以按预期工作。)