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

时间:2014-10-18 19:24:20

标签: c# forms label mouseclick-event

我试图在图片的文本中点击哪个*。 Pic

注意:*的数量一开始是未知的。用户输入它。所以鼠标点击的位置没用。

2 个答案:

答案 0 :(得分:3)

答案是:

第一个*的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;
        }

答案 1 :(得分:2)

这取决于。如果您愿意在TextBox中显示文本而不是Label(这就是您现在正在使用的内容),那么您可以使用GetCharIndexFromPosition方法。只需确保在客户端坐标中指定Point(如果您在Label控件本身处理鼠标点击,则免费提供)。

请注意,您可以将TextBox设置为ReadOnly,假设您不希望用户实际修改文本。他们仍然可以选择文本。

如果你需要一个实际的Label控件(例如,你甚至不想要可选择的文本,并且禁用的TextBox的灰色外观不合适),那么你必须写你的拥有(或在其他人写的网上找到一个),因为内置的没有这个功能。这不会太难。您可以使用TextRenderer方法确定绘制时每个字符的布局位置,然后使用该信息通过鼠标单击来关联字符位置。