【发布时间】:2014-12-01 02:57:15
【问题描述】:
我正在使用 Graphics 对象在表单上绘制矩形或椭圆(取决于选择的内容)。有什么方法可以在绘制这些图形对象后对其进行操作?我的意思是调整大小、删除、拖动等操作。另外,值得一提的是,在同一个表单上可以绘制多个形状并且它们可以重叠。
绘图本身看起来像这样,由 ScrollableControl 的 OnPaint() 事件触发 - 只需将这些方法传递给 PaintEventArgs 的 Graphics 对象。
protected override void Fill(System.Drawing.Graphics g, Brush b)
{
g.FillEllipse(b, m_topLeft.X, m_topLeft.Y, m_width, m_height);
}
protected override void Draw(System.Drawing.Graphics g, Pen p)
{
g.DrawEllipse(p, m_topLeft.X, m_topLeft.Y, m_width, m_height);
}
我希望能够点击一个形状,选择如何处理它并采取相应的行动。 我在想也许我可以检查光标的位置是否在形状的范围内(m_topLeft、m_width 和 m_height 数据成员)并从那里开始。尽管它确实有效,但这并没有考虑到潜在的重叠。所选点可能属于两个(或更多)形状。
这是使用用户定义的参数绘制的两个重叠形状(一个矩形和一个椭圆)的示例:
【问题讨论】:
-
这当然是可能的,但您必须从头开始编写所有代码。这不是一项微不足道的任务。首先开发一个类来表示形状,并为其提供一种使用拖动手柄在选定状态下绘制自身的方法。然后,您需要进行命中测试以查看光标是否在这些句柄上并采取相应措施。对于多个形状命中,您可以为用户提供一种通过按键选择下一个命中的方法?
-
或者,您可能希望停止使用已弃用的 winform 并继续使用当前技术,请参阅 my example