【问题标题】:How to find the position of a single word of text in a form C#如何在表单C#中查找单个文本单词的位置
【发布时间】:2015-12-27 14:18:38
【问题描述】:

我不确定这是否可能。我有兴趣在 WinForm 上找到一个文本单词的 (x,y) 位置。

比如下图中,我希望能在“HERE”中拉出字母H左上角的(x,y)坐标。

我知道如何获取文本框的位置,因此我可以根据“HERE”一词在文本框中的位置进行粗略估计,但我希望能够只询问程序这个词在哪里如果可以的话。

另外,如果有办法获得该位置,我希望能够获得单词的长度和高度(基本上我想知道单词“HERE”的边界框的坐标,如果可能)

不确定这是否重要,但文本框是 richTextBox,并且文本框是从 Form1 类中的字符串数组填充的。

提前谢谢你!

【问题讨论】:

  • 但是,你为什么要这样做?
  • 我想相对于某些单词/短语的位置来定位表单中的其他对象。我尝试缩小文本框,使其仅足以显示文本,然后基于此进行定位,但随后文本更新并且事情不再起作用。

标签: c# winforms text position richtextbox


【解决方案1】:

您可以使用GetPositionFromCharIndex 方法,在TextBoxRichTextBox 中获取“HERE”的位置(两者都适用)。

您可能知道,要在窗口中获得位置,您必须将其与richTextBox 的位置相加。像这样:

int index = richTextBox1.Text.IndexOf("HERE");
Point textBoxLocation = richTextBox1.GetPositionFromCharIndex(index);
Point windowsLocation = new Point(richTextBox1.Location.X + textBoxLocation.X, richTextBox1.Location.Y + textBoxLocation.Y);
Console.WriteLine("Position in textbox: " + textBoxLocation.ToString());
Console.WriteLine("Position in window: " + windowsLocation.ToString());

【讨论】:

  • 我试过这段代码,但它不适合我。如果我理解这段代码是如何工作的,我可能会误导你。填充文本框的字符串数组只有 3 个条目。 text[0] = "从下面的下拉列表中选择一个项目"、text[2] = "" 和 text[3] = "我想找到这里的位置"。因此,没有“HERE”的索引。因此,使用您的代码的索引变量返回的索引为 -1。我应该用“这里”打破界限吗?我想你的代码会起作用。
  • @BrianH 如果index 为-1,则表示代码中没有“HERE”(区分大小写)
  • ...是的...搜索的是下部文本框而不是上部文本框...我的错!
  • 但是,现在它返回点 (0,0),这不是单词“HERE”所在的位置......?我试过用“HERE”这个词代替不同的词,它为所有不同的词得到不同的索引,但对于我试过的所有词来说,重点总是(0,0)
  • 只需:创建空的WinForms 项目。只放在那里richTextBoxbutton。将我的代码粘贴到 button1_Click 事件中。打开应用,在richTextBox 中输入“HERE”,您将必须拥有 textBoxLocation=(1,1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
相关资源
最近更新 更多