我试图在图片的文本中点击哪个*。
注意:*的数量一开始是未知的。用户输入它。所以鼠标点击的位置没用。
答案 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方法确定绘制时每个字符的布局位置,然后使用该信息通过鼠标单击来关联字符位置。