Frage von CSHARK, 46

C# Überprüfen ob sich ein Objekt (in meinem Fall ein Panel) auf Koordinate x/y befindet / Existiert?

Hey weiß jemand wie ich in C# Überprüfe (Programmatisch) ob sich auf einer beliebigen Koordinate auf der Form ein Panel befindet?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Unsinkable2, 38

Wenn du Zugriff auf die Form hast, hast du auch Zugriff auf die Panels auf der Form. In "Control.Controls" befindet sich der Baum. Suche nach dem Panel. Dann frage das Panel, an welcher Position es sich befindet. Der Rest sind, wie @EightSix schon sagte, simple Addition und Vergleiche.

---------------------

Sauberer OO-Ansatz: Alternativ kannst du auch eine (öffentliche) Methode, eine Eigenschaft oder ein Event in die Form schreiben, die bzw. das gezielt auf solche Anfragen reagiert und dir auf die Koordinaten-Anfrage das Objekt (oder einen boolschen Wert) zurückgibt.

--------------------

Wenn du keinen Zugriff auf die Form hast, kannst du es mit Reflection lösen. Das ist aber kniffeliger; und es kann unter Umständen (etwa bei häufigen Positionsabfragen) ziemlich langsam werden. Greife dann auf die laufende Anwendung, die Bibliothek, etc. zu und fische dir die passende Form samt Panels heraus. Hier musst du in der Regel aber ein bisschen mehr Rechnen, um zum finalen Ergebnis zu kommen.

Von ganz außen zuzugreifen ist erheblich schwieriger und ungenauer, weil die Form selbst unter Umständen nicht pixelgenau dargestellt wird und ein Panel als solches nicht zwingend in den exakten Abmessungen sichtbar ist. (Farbschema-Einstellungen, Auflösungen des Monitors, etc.)

Die beste Lösung ist dann wohl, eine eigene "Reflection-Map" aufzubauen, sich also die Positionen und Größen von Panels und Objekten irgendwo zu hinterlegen und selbst auszurechnen, welches Panel oder Objekt dort sein müsste. 

Antwort
von EightSix, 46

Mit Panel.Size und Panel.Location bekommst die dementsprechenden X und Y Koordinaten der oberen linken Ecke sowie Breite und Höhe.

Der Rest ist nur bißchen addieren und vergleichen.

Kommentar von CSHARK ,

Das ist mir klar aber ich habe auf die Liste in der sich die Panels befinden keinen Zugriff darum brauche ich eine Möglichkeit abzuprüfen OB sich auf z.b. 30/65 ein Panel befindet oder eine Backcolor hat oder ob diese Koordinate leer ist und sich darauf nix befindet...

Keine passende Antwort gefunden?

Fragen Sie die Community