Mittels GDI über Controls zeichnen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von LaMiy.

    Mittels GDI über Controls zeichnen

    Hallo liebe VB-Community!

    Ich hab folgende Problemstellung:

    Ich beschäftige mich damit eigene GUIs zu erstellen, welche über GDI gezeichnet werden.
    Da ich mir aber ersparen will, einen komplett eigenen Button machen, also sprich Mausklick und Position abfangen, Events ähnlich dem des MouseEnter zu erstllen, hatte ich vor z.B. in einem oder über Controls zu zeichnen.

    Nehmen wir als Beispiel einen Button:
    Wenn ich im Paint-Event z.B. vertikal durch diesen eine Linie ziehe, ist der Button im Vordergrund.

    Deshalb meine Frage: wie realisiere ich, das die GDI Zeichnen Befehle über Controls zeichnen, um diese quasi zu manipulieren?
    Erbe von Button. Innerhalb der geerbten Klasse kannst du auch im Paint-Event arbeiten / alternativ in der OnPaint-Methode. Vorteil: Der Button bleibt wie er ist (vom aussehen und von der Funktion her) - du kannst ihn aber erweitern/manipulieren.
    Das geht gar nicht (also theoretisch schon, aber das ist dann wirklich nicht mehr sinnvoll).
    Das ist der falsche Ansatz.
    Ein Control ist eine für sich abgeschlossene Klasse, die nur ihre Aufgabe ausführt. Ein Button soll nicht außerhalb von sich selbst zeichnen können.
    Wenn Du also eine GUI selbst zeichnest, dann ist es entweder notwendig, die einzelnen Elemente sauber in Klassen zu packen, oder alle Controls, die Du brauchst, fast komplett neu zu machen, und dabei das Zeichnen von einer Engine machen zu lassen.
    Bei ersterem kann ein Button wie gesagt nicht außerhalb seines Bereiches zeichnen.
    Bei letzterem kann die Engine alles zeichnen, was sie will. Das sollte aber im Normalfall nicht nötig sein.

    Edit: Möchtest Du z.B. eine Linie nur im Bereich des Buttons zeichnen, oder sollen Linien auch durch gehen?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Kann man so oder so machen.
    Wenn man den Button mitte Linie drin häufig braucht, mag man mw. Button beerben und ihm beibringen sich selbst mit einer zusätzlichen Linie zu schmücken.

    Wenns aber nur ein Einzelfall ist, dann kann man ebensogut im Form-Code das Button_Paint-Event behandeln, und die Linie rein-painten.

    Der TE macht wohl den Fehler, dasser das Form_Paint-Event behandelt, und weil der Button auf dem Form sitzt, geht die Linie ihm sprichwörtlich am A... vorbei.

    Noch lästiger wirds, wenn die Linie über beide gezogen werden soll, also übers Form und über den Button.