MouseEnter上绘制的形状/线条触发

时间:2013-03-11 13:34:10

标签: c# .net winforms events

我有PictureBox,如何绘制一个形状/ ,它会触发MouseEnter事件并更改颜色或执行更多操作。

private void ImgViewer_Paint(object sender, PaintEventArgs e)
        {
            var graph = e.Graphics;
            using (var pen = new Pen(Color.FromArgb(0, 255, 0)))
                graph.DrawLine(pen, x1, y1, x2, y2);
        }

这段代码还不够,我想

1 个答案:

答案 0 :(得分:0)

如果您知道形状的等式,则可以计算鼠标是在形状区域之内还是之外。注意,如果形状由几何方程相对简单的直线或圆(椭圆)组成,则这很容易。例如,如果你的形状是一个带有x和y坐标(10,10),(50,10)和(30,50)的三角形,那么你应该使用两个点上的线方程推导出线的方程: / p>

y-y1 = ((y2-y1)/(x2-x1))*(x-x1)

我们三角形线的方程式为:

y=1
y=2*x-10
y=-2*x+110

我们应该在某个画布上绘制该三角形,让我们说PictureBoxFixedSingle边框。添加Paint事件处理程序

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
     Point[] p = new Point[3];
     p[0] = new Point(10,10);
     p[1] = new Point(50,10);
     p[2] = new Point(30,50);
     e.Graphics.DrawLines(Pens.Black, p);
     e.Graphics.FillPolygon(Brushes.Red, p);
}

Triangle

我们应该为MouseMove

添加PictureBox事件处理程序
bool inside = false;
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
     if (e.Y > 10 && e.Y < 2 * e.X - 10 && e.Y < -2 * e.X + 110)
     {
          if (!inside)
          {
               inside = true;
               HandleMouseEnter();
          }
     }
     else
          inside = false;
 }
 void HandleMouseEnter()
 {
       MessageBox.Show("Mouse inside");
 }

if语句中鼠标光标是否在三角形内(请注意,C#中的坐标原点位于左上角,但它与真实几何体类似)。 HandleMouseEnter是处理鼠标输入的方法。

你可以对任意形状使用类似的方法,但你应该有描述它的几何方程式。