Clickevents und Image/Picturebox

inuh

Grünschnabel
Hallo erstmal !

Ich habe eine Frage bezüglich Klickevents und einem Image..

Ich habe folgendes Szenario:

Ich erstelle ein Bild, bemale es mit den GDI-Funktionen (ein Chart) und setze es dann
in eine Picture-Box in einem Form.

Nun gibt es in dem Image (bzw. in der PictureBox) verschiedene Bereiche (Punkte in dem Chart), die "anklickbar" sein sollen, d.h. wenn der Benutzer mit der Maus drüberfährt, soll sich der Maus-Cursor ändern und beim Klick soll eine bestimmte Aktion ausgeführt werden.

Jetzt weiss ich nicht so recht, wie ich das "elegant" lösen soll, ich bin da in Sachen GDI und Grafik echt nicht sonderlich bewandert (wie ihr ja seht).

Ich könnte natürlich jeden klickbaren Bereich in dem Image mit seinen Koordinaten in irgendeiner Collection (z.B. ArrayList) festhalten, und beim MouseOver-Event der Picturebox nachsehen, ob sich die Maus über einem dieser Bereiche befindet, aber irgendwie erscheint mir das "krückig".

Gibt es da eine andere / besserere / gängigerere / elegantere Methode ?

Bin dankbae für jeden Tipp !

Danke schön und allerbeste Grüsse,

inuh.
 
Du hast die Lösung meiner Meinung nach schon definiert.
Ich würde es nicht anders machen. Ich hab noch nicht gehort das man Controlbereiche in eine Art Gitternetz verwandeln kann und somit seine Auswahlflächen definieren kann, wenn ich jetzt verstanden habe was Du machen willst.
So ähnlich implementiert man es ja auch wenn man zum Beispiel einen TreeView mit Click&Drop Funktionen versieht oder das KontextMenu für die angeklickten Elemente konfiguriert bevor es angezeigt wird.

MfG cosmo
 
Hallo cosmochaosmaker!

Danke für die Antwort, dann werde ich es so machen.
Ich hoffe nur, daß es keine Performance-Probleme (z.B. Mausruckeler) geben wird,
da die ganze Geschichte sehr dynamisch ist und unter Umständen sehr viele Bereiche in dem Image "anklickbar" sein werden, und bei jeder Mausbewegung muss ja die gesamte Collection mit den Bereichs-Koordinaten abgegrast/durchlaufen werden.

Ich versuchs dann mal, vielleicht fällt mir ja noch irgendeinen pfiffige Routone ein.

Allerbesten Dank für sie Bestätigung,

beste Grüsse,

Huni.
 
Das erfassen solltest Du in einem Thread durchführen. Dann gibt es auch keine "Mausruckler". ;)
Wenn Du beim erfassen bist, kannst Du ja temporär sowas wie eine Uhr anzeigen bis deine Routine herausgefunden hast über welchen Element sich der Cursor grad befindet. Damit erkennt der User das grad wenigstens was passiert.
Und prüfe immer zuerst auf den letzten Bereich wo sich der Coursor befand. ( zwischen Max&Min X oder Y ) dann geht es denke ich mal schneller. Aber ich glaub Du würdest es sowieso so machen. :)

Hoffe ich konnte helfen.

MfG cosmo
 
Ja, do konnest sehr helfen, danke schön !

Ich habs jetzt testweise umgesetzt und es scheint, daß es keinerlei Performance-Probleme gibt, funtioniert bestens, zumindestens hier auf der Kiste (XP 2500+).
Ma sehen, ob ich zum Testen irgendwo noch nen "Gurkenrechner" finde.

Allerbesten Dank nochmal und Grüsse,

inuh.
 
Zurück