Rectangle hat mehr praktisch, aber oft Funktionen übersehen. In diesem Fall mit der Rectangle.Contains(Point)
Funktion ist die beste Lösung:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (hitbox.Contains(e.Location)) .. // clicked inside
}
Um festzustellen, ob Sie auf dem Umrisse geklickt Sie auf eine Breite, um zu entscheiden, werden Sie wollen, da der Benutzer nicht ohne weiteres einen einzigen Hit kann Pixel.
Dazu können Sie entweder GraphicsPath.IsOutlineVisible(Point)
..
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
GraphicsPath gp = new GraphicsPath();
gp.AddRectanle(hitbox);
using (Pen pen = new Pen(Color.Black, 2f))
if (gp.IsOutlineVisible(e.location), pen) .. // clicked on outline
}
..oder auf Rechtecke bleiben ..:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
Rectangle inner = hitbox;
Rectangle outer = hitbox;
inner.Inflate(-1, -1); // a two pixel
outer.Inflate(1, 1); // ..outline
if (outer.Contains(e.Location) && !innerContains(e.Location)) .. // clicked on outline
}
Was ist Ihr 'gfx' beziehen sich auf? – Tommy
Wenn Ihr "gfx" ein "e.Graphics ..." von einem Formular ist, dann verwenden Sie einfach das Ereignis MouseDown, es gibt e.X und e.Y. –
Verwenden Sie niemals 'control.CreateGraphics'! Versuchen Sie niemals ein 'Graphics' Objekt zu cachen! Zeichnen Sie entweder mit einem 'Graphics g = Graphics.FromImage (bmp)' oder im 'Paint' -Ereignis eines Steuerelements in eine' Bitmap bmp'. Verwenden Sie dazu den 'e.Graphics' Parameter. – TaW