【问题标题】:How to: Get text index from label by mouse position? C#如何:通过鼠标位置从标签获取文本索引? C#
【发布时间】:2011-12-15 04:52:43
【问题描述】:

我有一个包含如下文本的标签:

00 AA FA 08 0F FF 84 7A A7 22 27 94 73 9A 7F D3 00 AA FA 08 0F FF 84 7A A7 22 27 94 73 9A 7F D3 00 AA FA 08 0F FF 84 7A A7 22 27 94 73 9A 7F D3 00 AA FA 08 0F FF 84 7A A7 22 27 94 73 9A 7F D3 00 AA FA 08 0F FF 84 7A A7 22 27 94 73 9A 7F D3

所以,由于这是一个标签(我不想使用 TextBox),我需要知道如何在光标位置的标签中获取文本的索引。

假设在最后一个文本中,鼠标在 AA 上方单击。

00 AA FA 08 0F FF 84 7A A7 22 27 94 73 9A 7F D3 00 AA FA 08 0F FF 84 7A A7 22 27 94 73 9A 7F D3 00 AA FA 08 0F FF 84 7A A7 22 27 94 73 9A 7F D3 00 AA FA 08 0F FF 84 7A A7 22 27 94 73 9A 7F D3 00 AA FA 08 0F FF 84 7A A7 22 27 94 73 9A 7F D3

然后,我需要获取“AA”的索引,有没有办法做到这一点?,(不管我是否必须使用 Win32 API)

我真的什么都找不到……

我正在使用 Windows 窗体。

【问题讨论】:

  • 如果您为每个十六进制对创建单独的标签,这将容易得多。如果您使用一个标签,则一种选择是处理 MouseDown 事件(单击不会为您提供任何位置信息)以确定用户单击的位置,然后通过测量与该坐标对应的字符数来确定该坐标代表的对。
  • "然后通过测量对应于该坐标的字符数来确定该坐标代表的对。" 你能给我一个线索吗?分开的标签,IDE 变得非常滞后。
  • 那是非常糟糕的建议。您需要使用固定间距字体,例如 Consolas 或 Courier,以便数字处于可预测的位置。然后,您只需要知道将鼠标位置映射到字符串索引的字母大小即可。 TextRenderer.MeasureText() 在 Winforms 中查找。
  • 我不想使用 TextBox 为什么? 使用 read-only 并且使用 GetCharIndexFromPosition 方法非常简单.不要对着系统工作!

标签: c# text cursor position label


【解决方案1】:

是winforms还是WPF?

您是否尝试过使用 onMouseMove 事件 (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mousemove%28v=vs.71%29.aspx) 并获取mousemoveeventargs 的位置?那应该给出一个位置。您可以计算字体大小并计算出是否可以将位置除以字符数来找到位置。

需要注意的一点是,要确保您使用的字体具有等宽的字符,但其中很多都没有。

我不会推荐我在架构上建议的方法,因为它非常hacky并且不太可能可用于其他事情。消除所有错误也需要一段时间。

我会建议使用 WPF 是可能的,并使用带有模板的列表视图,该模板可以生成网格。请在此处查看此示例:http://www.mindscapehq.com/blog/index.php/2007/12/04/five-steps-to-wpf-data-visualisation/ 该示例显示了如何更改列表框的外观以将元素放置在 x,y 坐标中。列表视图默认支持检查项目是否被选中。如果您可能被 winforms 卡住了,我的原始方法还可以,或者动态生成大量标签可能会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多