将事件分配给自定义绘制的形状

本文关键字:绘制 自定义 事件 分配 | 更新日期: 2023-09-27 18:08:37

如何绘制线并将事件分配给它?我想画一个自定义形状,但它应该像一个正常的控制,并有属性和事件。例如:

button1_Click(object sender, EventArgs e)
{
    DrawLine(width, height, location, location, color, panelToDrawShapeOn, nameThisShape);
}
nameThisShape_Click(object sender, EventArgs e)
{
    MessageBox.Show("Click event raised.");
}
private void DrawLine(int width, int height, int location, int location, Color color, Panel panel, string controlName)
{
    // Code to draw shape and setup events for it.
}

确认一下,我确实知道如何使用GDI+绘制形状,但问题是,它们是静态的,我不能与它们"交互",并且没有多少搜索引导我找到正确的位置来找出如何与我绘制的形状进行交互。

将事件分配给自定义绘制的形状

您将无法像处理控件那样处理自定义绘制的形状。正如您所发现的,GDI+是一个即时模式图形系统(与保留模式系统相反)。这意味着,如果你想要渲染一个充满形状的持久场景图形,你需要自己创建和管理它。然后,你将在作为绘图目标的控件上挂钩感兴趣的事件,并通过在可渲染对象列表上进行命中测试来处理它们(例如,查找鼠标在什么形状上,如果有的话)。

编写这些代码可能需要大量的工作,但是你可以找到一些库来帮助你。例如,在我的一个工作项目中,我们使用了一个名为JTS的计算几何库来表示几何形状和命中测试代码。如果你想避免使用第三方库,你可以使用Region类,它至少会给你一些测试。