是否有可能在C#表单上单击文本的哪个字符?

是否有可能在C#表单上单击文本的哪个字符?,c#,forms,label,mouseclick-event,C#,Forms,Label,Mouseclick Event,我正在尝试获取标签文本中单击的*中的哪一个,如图所示。 注意:开始时*的数量未知。用户输入它。因此,鼠标单击的位置没有用处。这取决于它。如果您愿意在文本框中显示文本,而不是在标签中显示(您现在使用的标签),则可以使用该方法。只需确保在客户端坐标中指定点(如果在标签控件本身中处理鼠标单击,则免费提供) 请注意,您可以将文本框设置为只读,前提是您不希望用户实际修改文本。不过,他们仍然可以选择文本 如果您需要一个实际的标签控件(例如,您甚至不想要可选文本,并且禁用的文本框的灰显外观不合适),那么您必

我正在尝试获取标签文本中单击的*中的哪一个,如图所示。


注意:开始时*的数量未知。用户输入它。因此,鼠标单击的位置没有用处。

这取决于它。如果您愿意在文本框中显示文本,而不是在标签中显示(您现在使用的标签),则可以使用该方法。只需确保在客户端坐标中指定点(如果在标签控件本身中处理鼠标单击,则免费提供)

请注意,您可以将文本框设置为只读,前提是您不希望用户实际修改文本。不过,他们仍然可以选择文本


如果您需要一个实际的标签控件(例如,您甚至不想要可选文本,并且禁用的文本框的灰显外观不合适),那么您必须编写自己的控件(或在线查找其他人已经编写的控件),因为内置控件不具备该功能。这不会太难。您可以使用TextRenderer方法确定绘制时每个字符的布局位置,然后使用该信息通过鼠标单击关联字符位置。

这取决于具体情况。如果您愿意在文本框中显示文本,而不是在标签中显示(您现在使用的标签),则可以使用该方法。只需确保在客户端坐标中指定点(如果在标签控件本身中处理鼠标单击,则免费提供)

请注意,您可以将文本框设置为只读,前提是您不希望用户实际修改文本。不过,他们仍然可以选择文本

如果您需要一个实际的标签控件(例如,您甚至不想要可选文本,并且禁用的文本框的灰显外观不合适),那么您必须编写自己的控件(或在线查找其他人已经编写的控件),因为内置控件不具备该功能。这不会太难。您可以使用TextRenderer方法确定绘制时每个字符的布局位置,然后使用该信息通过鼠标单击关联字符位置。

答案是:

已知第一个*位置的X,等于10。星号间隔相等,两个*之间的距离约为15像素

当用户单击其中一个星号时,星号的索引可按以下代码计算

private void label4_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            double t = (e.X - 10) / 15.0;
            int indexOfClickedAsterisk=(int)Math.Round(t) + 1;
        }
答案是:

已知第一个*位置的X,等于10。星号间隔相等,两个*之间的距离约为15像素

当用户单击其中一个星号时,星号的索引可按以下代码计算

private void label4_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            double t = (e.X - 10) / 15.0;
            int indexOfClickedAsterisk=(int)Math.Round(t) + 1;
        }

将它们分开,将每个数字放入不同的标签中,并将相同的事件处理程序附加到所有标签上。然后使用sender获取单击的标签。将它们分开,将每个数字放入不同的标签中,并将相同的事件处理程序附加到所有标签上。然后使用sender获取单击的标签。