[VB2010] Click-Handler/Click-Event für bestimmte Bereiche einer Form

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    [VB2010] Click-Handler/Click-Event für bestimmte Bereiche einer Form

    Hallo Gemeinde!

    Habe ein Form(at)-füllendes Bild, in dem bestimmte Bereiche per Klick Events auslösen sollen.
    Als HTML-Kenner von area-shape dachte ich mir, es sei eine gute Idee, in VB 2010 die gesamte Form mittels TableLayoutPanel in (leider sehr viele) rechteckige Bereiche zu unterteilen.
    Nun stelle ich leider fest, dass es keinen Click-Event-Handler für eine bestimmte Reihe/Spalte gibt.
    Was ist die einfachste Lösung? In jedes dieser "Felder" eine Picturebox (mit transparentem Image) legen?
    Kann man so überhaupt mehrere Bilder übereinander legen und haben diese dann einen Click oder MouseDown-Event-Handler?
    Ich würde das TableLayoutPanel nur ungern ersetzen.

    Sorry für die scheinbar einfache Frage eines absoluten Anfängers, der aber in den Grundlagen und beim weiteren Suchen nur sehr umständliche Lösungsansätze gefunden hat (Cursorposition und Berechnung, welches Feld getroffen ist, ist keine gute Idee, wenn die Felder alle unterschiedlich gross sind, oder?) .

    Brummbär schrieb:

    Cursorposition und Berechnung, welches Feld getroffen ist, ist keine gute Idee, wenn die Felder alle unterschiedlich gross sind, oder?

    ich find das eine gute Idee. Sollte sich in wenigen Zeilen abhandeln lassen.

    Nur verstehe ich nicht, warum alle Felder verschieden groß sind. Ich täte denken, es gebe da maximal ein paar Zeilen-Höhen, und Spalten-Breiten, und daran müssten sich die Feldgrößen halten.
    @Gonzo16: Okay, das habe ich nun so gemacht. Habe zwar keine Picturebox, sondern noch einfacher nur ein Formular, darauf ein TableLayoutPanel mit BackgroundImage. Und nun zig anklickbare Labels mit transparenter BackColor. Ist halt unübersichtlich und im Layouten ebenso unsichtbar.
    Darum meine Hoffnung auf eine elegantereLösung mit weniger Code.

    @Mr.B...ErfinderDesRades: Ich habe Beispielcode gesehen, der fast noch mehr Zeilen hatte als ich Felder ;)
    Es handelt sich um ca. 100 Felder. Feldgrößen sind natürlich bestimmt durch die Spalten und Zeilen, die sind alle prozentual angelegt. Mag sein, dass es geht, aber für mich Anfänger zuviel "Notcode".

    Danke euch beiden für die Vorschläge!

    ErfinderDesRades schrieb:

    also das ist ja wohl das einfachste, wenn alle gleichgroß sind (Stichwort "Division"). Das läuft auf ca. 5 Zeilen "NotCode" hinaus, und du sparst 100 Labels ein.
    Okay, hast recht. Mathematik beherrsche ich durchaus mit Leichtigkeit. Nochmal: Sie sind nicht gleich groß. Bsp.: 15 px, 5%, 11%, die letzte Zeile/Spalte sind jeweils autosized. Das Alles lässt sich natürlich errechnen (VB+Compiler machen ja nichts anderes), wobei ich nicht erwähnt hatte, dass manche Felder mit Pictureboxen gefüllt sind, deren Bilder öfter wechseln und somit auch die Grösse.
    Was mir fehlt ist Programmiererfahrung unter .NET - Stosse ständig bei grundlegenden Dingen, die sicher nicht von mir erfunden werden, auf das Gefühl, das Rad neu erfinden zu müssen - und kann es kaum glauben. Dein Nickname spricht für ähnliche Erfahrung?
    Hatte vor Jahren mal mit VB6 erfolgreich angefangen. VB2010 bzw. .NET bringt für mich als Umsteiger einfach zu viel Ballast mit, der erstmal sehr zeitaufwändig zu erlernen ist. Mit HTML, JS, Java und PHP wäre ich sicher weiter gekommen, nun hat mich aber der Ehrgeiz gepackt, es doch weiter mit VB zu versuchen.
    Ohne dieses hilfreiche Forum mit seinen Helfern hätte ich längst aufgeben müssen. Bücher allein bringen einen nicht weiter. Es fehlen meist konkrete Beispiele.
    Also hier mal ein grundsätzliches DANKESCHÖN an alle mitlesenden Helferlein!

    Brummbär schrieb:

    Sie sind nicht gleich groß.
    Da denke ich sofort an TableLayoutPanel, stand schon in Deinem Post #4.
    Kannst Du die Klicks auf eine PictureBox nicht an das darunterliegende TLP weiterreichen oder nur die leeren Objekte im TLP behandeln?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!