抽绳onclick方法C#

时间:2012-07-13 14:21:49

标签: c# onclick drawstring

我有一些使用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事件?我希望在你点击束带时创建一个新表格。谢谢!

2 个答案:

答案 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());
      }
    }
  }
}