gpt4 book ai didi

c# - 在给定点的用户绘制的字符串中查找字符

转载 作者:行者123 更新时间:2023-11-30 15:09:35 25 4
gpt4 key购买 nike

所以我正在用 C#(不是 WPF)构建一个自定义控件,我基本上想用鼠标实现文本突出显示。

如何有效地找到字符串中给定 Point(比如鼠标点击的位置)处的字符?我有字符串的布局矩形,因为它是绘制的,我可以计算字符串的长度直到每个字符,直到找到最接近鼠标点击位置的那个……但必须有更好的方法。有什么建议吗?

最佳答案

如果我必须这样做,我会向后看。
我会将输入的文本作为控件中的 string 成员保留,因此我始终知道控件中实际输入的内容(例如 Text 属性 文本框).
然后我会使用 TextRenderer.MeasureText() 方法 (http://msdn.microsoft.com/en-us/library/7sy6awsb.aspx) 并且我会反复测量字符串的长度直到我在控件中传递鼠标的 X 坐标,然后我才知道选择了多少个字符。

例如,假设用户在控件中写入文本Hello
并且 X 坐标恰好位于 lo 之间,其值可能为 20。
然后我会在以下字符串上重复调用 MeasureText():

  • H:宽度为 5 像素。
  • He:宽度为 10 像素。
  • Hel:宽度为 14 像素。
  • Hell:宽度为 17 像素。
  • 你好:宽度为 22 像素。

然后我知道鼠标在 lo 之间被击中,所以我会突出显示文本 Hell

抱歉这个令人反感的例子 =)

更新:
您可以通过以类似二叉搜索树的方式计算长度来稍微优化一下。
就像你在电话簿中查找一个名字一样,你不会一页一页地看,而是一边看一边分成两半,越来越近,直到它肯定在这两页之间。
类似地,特别是对于控件的长字符串值,计算整个字符串的宽度,然后将其长度减半,并在那里拆分。我认为那会是 O(n log n)
当然,如果文本的宽度是固定的,那就是 O(1) =)

关于c# - 在给定点的用户绘制的字符串中查找字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4258696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com