我有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);
}
这段代码还不够,我想
答案 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
我们应该在某个画布上绘制该三角形,让我们说PictureBox
带FixedSingle
边框。添加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);
}
我们应该为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
是处理鼠标输入的方法。
你可以对任意形状使用类似的方法,但你应该有描述它的几何方程式。