Ich habe eine Klasse erstellt, die es dem Benutzer ermöglicht, Fenster in Formulare zu ziehen. Wie kann ich sicherstellen dass der Benutzer nicht zwei Panels übereinander legt? Wenn dies der Fall ist, möchte ich eines der Steuerelemente verschieben / hervorheben, während beide überlappt sind.
Ich habe versucht, dies im OnMouseDown-Event einzustellen, aber das hat nicht ganz funktioniert.
Außerdem hängt die Anzahl der Felder im Formular von der Anzahl der Bilder ab, die das Formular anzeigen muss. Jedes Panel hat eine Bildbox im Panel.
Ein viel besserer Ansatz besteht darin, die Rectangle.Bounds.IntersectsWith-Methode zu verwenden, die die Überprüfung für Sie durchführt und saubereren Code erzeugen kann. Mir persönlich sind keine Leistungsprobleme oder Vorteile auf die eine oder andere Weise bekannt, obwohl ich annehmen würde, dass das einfache Umkehren der Steuerelemente und deren Überprüfung schneller wäre als das Erstellen von Listen und Schleifen.
%Vor%Ich hoffe, das hilft, obwohl Sie diese Frage schon vor einiger Zeit gestellt haben.
So konnte ich diese Frage mit Hilfe von sguds Vorschlag lösen.
Der Trick bestand darin, die Rectangle.Intersect-Methode im OnMouseUp-Ereignis ausgelöst zu verwenden.
Hier ist die Intuition, die ich dahinter verwendet habe. (Es ist vielleicht nicht die beste Lösung)
1) Erstellen Sie eine Liste aller Steuerelemente in meinem Hauptfenster.
2) Durchqueren Sie die Steuerelemente und erstellen Sie eine Liste aller Rectangle Bounds für jedes Steuerelement. Sie können dies durch control.Bounds
erhalten 3) Gehe durch die Liste der Grenzen und überschneide sie mit der Grenze des aktuell aktiven Elements.
Wenn das zurückgegebene Rechteck die gleiche Höhe und Breite wie das aktive Steuerelement aufweist, ändern Sie die Eigenschaft für die Hintergrundfarbe.
Ich hoffe, das hilft jedem anderen, der ein ähnliches Problem hat
Tags und Links c# winforms mouseevent panel