Usercontrol Vererbung

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von FreakJNS.

    Usercontrol Vererbung

    Hallo Liebe VBler,
    Ich habe eine Frage bezüglich der Erstellung eines Usercontrols.
    Mein Problem ist wenn ich das Usercontrol von irgendeinem anderen Control erben lasse meckert er rum

    VB.NET-Quellcode

    1. Partial Class UserControl1
    2. Inherits System.Windows.Forms.Panel

    So lasse ich es vom Panel erben

    Nun wirft die IDE hier en Fehler

    VB.NET-Quellcode

    1. UserControl1.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font


    Mit der Fehler Meldung:
    "AutoscaleMode" ist kein Member von Projektname.Usercontrol1

    Könnt ihr mir erklären wobei hier der Fehler liegt?Habe mich vorher nie mit Usercontrols beschäftigt und jetzt brauche ich es halt.
    2.Frage Was muss ich noch beachten wenn ich ein Usercontrol schreiben will?In Gdi habe ich mich schon Eingearbeitet.
    hey.
    Das kommt ganz darauf an, was du machen willst. Ich erbe für meine eigenen Controls immer von "Control" - da habe ich dann alle Freiheiten und die Vererbung pfuscht mir nicht dazwischen - z.B. will ich nicht, dass mein eigenes Control einen Borderstyl hat wie es der fall wäre, wenn ich von Panel erben würde.

    Willst du ein bestehendes Control erweitern - Beispiel ein Button soll eine Checkbox beinhalten oder anders dargestellt werden - dann erbe von Button. Gleiches gilt für Panel, Checkbox, etc. Die Funtionen des "Erbvaters" oder wie man es nennen soll bleiben also erhalten (sofern man sie nicht kaputt-coded^^)

    In deinem Fall meckert die IDE rum, da Panel nicht über die Eigenschaft AutoSclaeMode verfügt. Usercontrol schon.
    Erkläre bitte etwas genauer, was du vorhast, dann kann man dir gezielter helfen^^

    lg

    Edit: zum Thema GDI+
    Arbeite auf jeden fall im Paint-Event! Alles andere ist Pfusch am Bau^^ Also kleiner Grundsatz: Dein Control hat Eigenschaften (Properties), zum Teil vorgegebene (von Control) wie Size und Backgroundcolor - aber auch Eigene. Anhand dieser Eigenschaften zeichnest du das Control

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FreakJNS“ ()

    Was steht im File

    VB.NET-Quellcode

    1. UserControl1.Designer.vb
    ?

    VB.NET-Quellcode

    1. <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    2. Partial Class UserControl1
    3. Inherits System.Windows.Forms.UserControl
    4. End Class
    Du versuchst also von Panel und von UserControl zu erben.
    Das geht nicht.
    Mach Dir eine neue Klasse, nicht UserControl:

    VB.NET-Quellcode

    1. Public Class MyPanel
    2. Inherits System.Windows.Forms.Panel
    3. End Class
    Und schon geht das mit der Nachbarin.
    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!
    @FreakJNS
    Erstmal danke für den Ausführlichen Text^^.Okay angenommen ich würde ein Control wollen das Praktisch wie ein Container funktioniert, sprich wenn das Control ausgeblendet wird werden die darauf liegenden Controls auch ausgeblendet.
    Sprich das würde dann so aussehen

    VB.NET-Quellcode

    1. Partial Class UserControl1
    2. Inherits System.Windows.Forms.Control


    Nur wie kann es nun expliziet eigenschaften vom Panel erben das verstehe ich nicht ganz^^.

    rykoJLL schrieb:

    Nur wie kann es nun expliziet eigenschaften vom Panel erben das verstehe ich nicht ganz^^.
    Indem Du die Posts anständig liest.

    RodFromGermany schrieb:

    Mach Dir eine neue Klasse, nicht UserControl:

    VB.NET-Quellcode

    1. Public Class MyPanel
    2. Inherits System.Windows.Forms.Panel
    3. End Class
    Und schon geht das mit der Nachbarin.

    Wie die Klasse heißt, ist doch sch.... egal.
    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!
    Wenn er wie ein Panel funtkionieren soll, dann muss dein eigenes Control von Panel erben.

    Erklär doch mal was du genau vorhast. So wie sich das anhört musst du dich garnicht mti GDI+ auseinandersetzen, da du dein Control mit anderen Control bestücken willst - und das geht am besten mit dem Designer der IDE. Dafür ist dann "UserControl" zu benutzen. Einfach ein neues UserControl erstellen (Projekt -> Neues Element hinzufügen -> Benutzersteuerelement) und mit den enstprechenden Controls bestücken. Dann einmal kompilieren und shcon taucht dein UserControl in der Toolbox auf. Du kannst es auf die Form ziehen und benutzen.
    @RodfromGermany
    Tut mir leid das ich dich überlesen habe.Nur leider verstehe bei beiden Methoden nicht ganz wie ich vorgehen soll.

    @FreakJNS
    Also mein Vorhaben ist ein Usercontrol zu schreiben das wie ein Panel funktioniert, es sollen also Controls darauf platziert werden und sich darauf "andocken".Gdi dient nur dazu um darauf ein Gitter zu zeichnen(keine Angst ich benutzte von vornerein das Paint event).Nur verstehe ich das mit der Vererbung noch nicht.Aber wenn ich das Control vom Panel erben lasse bekomme ich ja wieder den Fehler der IDE.
    Du erstellst eine Klasse MyPanel und lässt sie von Panel erben. In dem Moment ist MyPanel 1:1 ein Panel - heißt nur anders. MyPanel beinhaltet ALLE Funktionen, die auch ein normales Panel beinhaltet (BorderStyle, Container für andere Controls etc).
    Nun kannst du MyPanel aber anpassen: Es soll weitere Eigenschaften bekommen (Abstand der gitterlinien)und sich selbs anders zeichnen (das gitter eben). Um das zu bewerkstelligen musst du im PaintEvent das Gitter anhand der Eigenschaften (Farbe, Gittterlinienabstand, Liniendicke etc) zeichnen.

    Ist es von dir gewollt, dass die Gitterlinien HINTER den Controls liegen? So wird das nämlich später aussehen...
    Mehr zum Thema Gitter zeichnen gibts hier: [VB 2010] Gitternetz


    Die Entscheidung Panel als "Erbvater" oder Bau eines Usercontrol:

    Im endeffekt erstellst du nichts anderes als einen Panel der ein Raster beinhaltet. Controls müssen immer "von Hand" hinzugefügt werden, ideal sofern du das so enstandene "PanelControl" mehrmals verwenden musst aber die daraufliegenden Controls immer verschieden sind.

    Anders ist das bei Verwendung eines UserControl. Dort kannst du per Designer andere Controls fest platzieren UND im Paint-Event das Gitter zeichnen. Das eignet sich ideal, wenn du die Steuergruppe auf dem UserControl mehrmals - in gleicher anordnung etc - verwenden willst.


    Alles in allem: vererbe Panel wenn du nur einen spezialPanel brauchst, der ein Raster darstellt. Bau dir ein UserControl (Projekt -> Neues Element hinzufügen -> Benutzersteuerelement) wenn du eine Gruppe von Controls mehrmals verwenden möchtest + Raster als Hintergrund.

    Wenn noch Fragen offen sind immer her damit!^^
    Wozu soll das Raster eigentlich gut sein?

    Edit: Panel hat keine AutoScaleMode-Eigenschaft, darum der Fehler in der IDE. Brauchst du diese Eigenschaft??

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „FreakJNS“ ()