0

我有 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);
        }

这段代码还不够,我猜

4

1 回答 1

0

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

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);
}

三角形

我们应该MouseMovePictureBox

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是处理鼠标进入的方法。

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

于 2013-03-11T21:46:54.200 回答