UserControl mit Combobox und TabControl

  • VB.NET
  • .NET (FX) 4.0

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von cl10k.

    UserControl mit Combobox und TabControl

    Hallo,

    ich habe bereits ein wenig Erfahrung mit UserControls und im Normalfall machen die Biester auch was ich möchte. Nun habe ich versucht ein TabControl (ohne Menüleiste/Karteireiter) und eine Combobox zum umschalten zu kombinieren. Leider geht dabei die Funktionalität des TabControls zur Designtime vollständig verloren, d.h. kein Drag&Drop von Controls auf das TabControl etc.

    Wie fängt man so ein Vorhaben richtig an? Wie leite ich ein UserControl von TabControl ab und erhalte dabei die volle Funktionalität des Originals?
    Wichtig ist mir, dass die Combobox und das TabControl als eine kompakte Einheit zusammengefasst werden.

    (Bisher löse ich das nämlich mit zwei regulären Controls die ich dann entsprechend aufeinander abstimme. Den dafür notwendigen Code möchte ich aber nicht länger in meinem Hauptprogramm rumfliegen haben...)


    lg
    Christian

    cl10k schrieb:

    Leider geht dabei die Funktionalität des TabControls zur Designtime vollständig verloren
    Was soll denn passieren?
    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!
    Definiere

    cl10k schrieb:

    zum umschalten zu kombinieren
    und

    cl10k schrieb:

    vollkommen statisch
    Poste ggf. mal Dein Projekt.
    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!
    Ich habe schnell ein Minimalbeispiel erstellt (quick und dirty, reduziert aufs Nötigste, ohne Rücksicht auf Konventionen...)

    Auf der linken Seite mein bisheriges Vorgehen:
    separate Combobox + separates TabControl

    Auf der rechten Seite mein sehr bescheidener Versuch eines UserControls.

    Wenn du im Form1 in den Designer gehst, steht dir für das konventionelle TabControl die übliche Funktionalität zur Verfügung. Umschalten /modifizieren von Tabpages und beliebig Controls auf den einzelnen TabPages arrangieren.

    Das UserControl hingegen, ist einfach nur noch ein toter Klotz den ich im Designer von Form1 nicht weiter modifizieren kann.


    Ich möchte einfach nur die komplette Funktionalität der linken Seite in einem einzelnen Control kapseln.

    ----

    Jetzt sollte mein Anliegen verständlich sein, oder?
    Dateien
    • CmbBxTbCtrl.zip

      (86,47 kB, 156 mal heruntergeladen, zuletzt: )

    cl10k schrieb:

    verständlich
    Ja.
    Ein UserControl ist nun mal ein Einheitliches Ganzes, da kannst Du im Designer nix einzeln auswählen, wie im Designer des Controls selbst.
    Für die MainForm ist das halt nur ein UserControl.
    Was Du machen kannst, gib dem UserControl eine Property mit, die das ganze umstellt:

    VB.NET-Quellcode

    1. Public Property SelectedIndex As Integer
    2. Get
    3. Return local_TabControl.SelectedIndex
    4. End Get
    5. Set(value As Integer)
    6. local_TabControl.SelectedIndex = value
    7. End Set
    8. End Property
    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!
    Mit dem Attribut "Browsable" kann die Property im Eigenschaften Fenster sichtbar gemacht werden.

    msdn.microsoft.com/de-de/libra…eattribute(v=vs.110).aspx

    Evtl. hilft das noch weiter, da Änderungen an so einer Property meines Wissens
    (bin grad nicht ganz sicher, lange ist es her :D ) direkt übernommen werden.


    Denkfehler meinerseits muss nicht weiter beachtet werden

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

    RodFromGermany schrieb:

    meinst Du?

    Jup, das meinte ich, ich muss aber gerade feststellen, dass es auch ohne Attribut angezeigt wird ?( .
    War bisher der Meinung, dass das Attribut gesetzt werden muss, damit es im Eigenschaften - Fenster des Control's angezeigt wird.

    Aber was Solls man lernt schließlich nie aus

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MrNobody“ ()

    MrNobody schrieb:

    dass das Attribut gesetzt werden muss
    um die Nicht-Anzeige vorzugeben.
    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!
    Gugst Du

    cl10k schrieb:

    TabControl
    ohne Reiter
    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!
    Benutze ich bereits exakt so wie in deinem Link beschrieben (daher hatte ich die Idee). Dann habe ich aber wieder zwei separate Controls und genau das möchte ich vermeiden.

    ---
    Zur Erklärung:
    Ich arbeite an einem kleinen Programm zur Modellierung technischer/ingenieurswissenschaftlicher Probleme. Das klingt jetzt viel komplizierter als es eigentlich ist, aber im Kern habe ich so etwas wie ein primitves Framework erstellt. Salopp, eine kleine, vermeintlich leere Anwendung die über eine gewisse Infrastruktur verfügt. Der Anwender kann eine Auswahl spezialisierter UserControls beliebig auf diese Anwendung ziehen, miteinander verdrahten und rechnen lassen. Die integrierte Infrastruktur sorgt dann u.a. für automatische Validierung, Fehlerdokumentation, konsistente Positionierung der Controls, usw usw. So können sich meine Kollegen auf die Modellierung ihrer Probleme konzentrieren und müssen sich nicht mit Details der Anwendungserstellung auseinander setzen (eine Schichtenarchitektur mit DataBinding, COM-Anbindung an ein paar für uns wichtige externe Programme und dem üblichen Pipapo werkelt im Hintergrund, ohne das der Anwender davon etwas mitkommt).

    Lass dich also nicht durch mein oben angehängtes Minimalbeispiel täuschen. Ich benötige ne ganze Menge Funktionalität in meinem Controls. Bislang kam ich dafür mit UserControls aus, die alle von einer gemeinsamen Basisklasse erben. Vorteil war, dass ich den ganzen Code schön gekapselt und nicht in der eigentlichen Hauptanwendung rumfliegen hatte. Im Endeffekt habe ich alle üblichen Controls (Textbox, Label, Trackbar, Combobox, ...) durch entsprechende UserControls ersetzt, sodass der Nutzer stupide per Drag&Drop seine Modellierung umsetzen kann.

    Die Kombination aus regulären Combobox/TabControl fügt sich aber entsprechend schlecht in mein Konzept ein. Jede Menge Funktionalität die ich zur Interaktion mit meiner Programminfrastruktur brauche, ist da eben nicht vorhanden. Daher mein Wunsch nach einem eigenen angepassten TabControl das ich entsprechend auf mein Konzept abstimmen kann...
    @cl10k Warum sollen Deine Controls im Studio-DesignModus komplexe Befehle ausführen?
    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!
    Generell müssen sie das gar nicht. Einfache UserControls funktionieren für meine Zwecke wirklich gut.

    Ich möchte meinen Anwendern nur die Möglichkeit geben, ihre Oberfläche entsprechend zu strukturieren. Da viele der technischen Probleme die wir modellieren ihrerseits wieder aus verschiedenen Teilsystemen bestehen, ist das TabControl mMn das ideale Werkzeug zur Strukturierung.

    Indem ich ein "Custom"-TabControl verwende, dass perfekt auf die vorhandene Infrastruktur des Programms aufsetzt, nehme ich wieder etwas "Entwicklungslast" von den Anwendern - die sich dafür dann mehr auf ihre technische Problemstellung konzentrieren können.

    Evtl ist mein Ansatz etwas speziell, aber hier im Forum habt ihr schon ganz andere Controls geschrieben/verändert. So eine unüberwindliche Hürde kann das doch nicht sein, oder? Ich weiß halt nicht wie man sowas anfängt, weil ich mich damit bislang nicht beschäftigt habe...

    cl10k schrieb:

    ihre Oberfläche entsprechend zu strukturieren.
    Passiert das im Design-Modus des Studios?
    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!
    Ja. Der Workflow zur Erstellung der Oberfläche ist quasi identisch wie mit konventionellen Controls in einer normalen WinForms Anwendung.

    Der Anwender erstellt seine Oberfläche ganz regulär im Forms-Designer. Statt normaler Controls nutzt er dafür aber UserControls die bereits darauf abgestimmt sind, mit der Infrastruktur der Anwendung zusammen zu arbeiten...

    cl10k schrieb:

    ganz regulär im Forms-Designer
    Da wird wohl einiges mit UserControls nicht funktionieren. ;(
    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!
    Hi Rod :)

    Nur um die Diskussion auf das Wesentliche zu reduzieren: Das allgemeine Konzept meiner Anwendung (insbesondere die UserControls im Zusammenspiel mit der Infrastruktur) funktioniert gut so wie es ist. Jetzt geht es halt darum die Ecken und Kanten abzuschleifen.

    Wenn für dieses spezielle TabControl-Problem UserControls keinen gangbaren Weg darstellen, ist das vollkommen in Ordnung. Nur was ist die Alternative? Mir schwirren Begriffe wie CustomControls und Ableiten von der TabControl-Klasse im Kopf rum, aber wie fange ich es an, welcher Weg führt zum Ziel? Mir fehlen die notwendigen Begrifflichkeiten mit denen ich eine geeignete Recherche starten kann.

    lg Christian

    cl10k schrieb:

    wie fange ich es an, welcher Weg führt zum Ziel?
    Fang an und mach Dir dafür ein kleines Testprojekt, in dem Du ausschließlich diesen Effekt untersuchst.
    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!