有一点,我使用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}";
}
这是我可以解决的问题吗?显然,“声明”一词并非真正具有相同的Y值。似乎就RichTextBox
而言,这个词确实启动得那么高,所以它只是测量它,但如果是这样的话,似乎没有一个明显的解决方案给我。
答案 0 :(得分:1)
GetPositionFromCharIndex
正在使用as designed。
文档声明:
此方法使您可以确定控件中特定的位置 字符索引位于。您可以将此方法用于此类任务 显示快捷菜单项或帮助信息 控制。例如,如果要显示选项菜单 当用户右键单击控件中的单词时,用户即可 使用此方法可以正确确定单词的位置 显示ContextMenu控件。
鉴于此,两个单词返回相同的Y值是有意义的 - 因为您希望右键单击以对两个单词执行一致操作(因此即使您在语句上方右键单击也是如此它仍然可以按预期工作。)