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)の三角形である場合、2点の線の方程式を使用して線の方程式を導出する必要があります。

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

三角形の線の方程式は次のようになります。

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

その三角形をいくつかのキャンバスに描画する必要があります。たとえば、withborderに描画しPictureBoxますFixedSinglePaintイベントハンドラーを追加します

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

三角形

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は、マウスの入力を処理するメソッドです。

任意の形状に対して同様のアプローチを使用できますが、それを説明するジオメトリ方程式が必要です。

于 2013-03-11T21:46:54.200 に答える