我有一些使用DrawString
绘制的字符串 for (int j = 0; j < dt.Rows.Count; j++)
{
e.Graphics.DrawString(Convert.ToString(dt.Rows[j]["ID"]), drawFont, drawBrush, new Point(Convert.ToInt32(dt.Rows[j]["XCord"]), Convert.ToInt32(dt.Rows[j]["YCord"])));
}
有没有办法为每个抽绳创建一个onclick事件?我希望在你点击束带时创建一个新表格。谢谢!
答案 0 :(得分:1)
没有。使用Graphics
渲染事物时,无法将事件绑定到绘制的对象。
有两种解决方案,您可以在表单(MouseClick
事件)上捕获鼠标,并确定鼠标是否在渲染字符串上(使用MeasureString
获取渲染区域)。然而,这是不必要的困难和复杂。
相反,我建议在表单上动态生成一个控件。您可以生成Button
,或者如果您喜欢表单上文本的样式,则生成Label
,然后将EventHandler绑定到他们的MouseClick
事件。
答案 1 :(得分:1)
处理容器的MouseClick
事件,并通过行枚举以找出文本的“矩形”,并查看鼠标位置是否位于其中:
void panel1_MouseClick(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) {
foreach (DataRow dr in dt.Rows) {
Point p = new Point(Convert.ToInt32(dr["XCord"]), Convert.ToInt32(dr["YCord"]));
Size s = TextRenderer.MeasureText(dr["ID"].ToString(), panel1.Font);
if (new Rectangle(p, s).Contains(e.Location)) {
MessageBox.Show("Clicked on " + dr["ID"].ToString());
}
}
}
}