GroupBox nur als optische Unterteilung - aber Radiobuttons übergreifend

  • VB.NET

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

    GroupBox nur als optische Unterteilung - aber Radiobuttons übergreifend

    Moin!

    ich habe einen Dialog bei dem es mehrere Gruppen gibt die mit Radiobuttons gefüllt sind. In dem gesamten Dialog darf aber immer nur ein Radiobutton gewählt werden.

    Durch die Gruppenbildung ist es aber möglich immer pro Gruppe einen Radiobutton auszuwählen.

    Die Gruppenbildung ist also nur optisch als Ordnungskriterium.

    Hier erst einmal mein Dialog damit Ihr Euch das besser vorstellen könnt.



    Kann man irgendwie erreichen, dass auf der gesamten Form immer nur ein Radiobutton aktiv ist?

    Oder gibt es eine geeignetere Unterteilung?

    Eine Art graphische Trennlinie habe ich nicht gefunden?

    Gruß Jan
    Oder Du notierst Dir die Positionen der RadioButtons (Rbtn) ohne die GroupBoxen (Gbx), schiebst alle Rbtns weit weg, platzierst die Gbxes auf ihre Sollpositionen, aber so, dass kein RBtn von Ihnen erfasst wird und änderst dann in den Rbtn-Properties die Koordinaten manuell. So liegen die Gbxes unter den Rbtns, ohne sie zu beeinflussen, da sie nicht automatisch als Rbtn-Parent eingestellt werden - was bei Drag&Drop der Rbtns anders wäre.

    EDIT: Es geht noch einfacher: Rbtns dorthin packen, wo sie sein sollen, Gbx auf das Form ziehen, aber so, dass sie keinen Rbtn erfasst, Gbx umplatzieren, ggf. Größe anpassen. Und in den Hintergrund schieben, damit sie die Rbtns nicht überdeckt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    @VaporiZed Problem: Wenn Du die nur ein Mal im Designer anfasst, ist alles vorbei und Du fängst von vorne an.
    Besser wäre es, einen entsprechenmden Code zu schreiben und ihn nach InitializeCompunents() oder Form_Load() aufzurufen.
    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!
    Das Problem ist glaub klar: RadioButtons sind immer eine Gruppe, welche auf demselben Container aufsitzt.
    Verteilt man die RBs auf mehrere Container (zB GroupBoxen), so sinds mehrere RB-Gruppen.
    Vaporizeds "Hack" verteilt die RBs nicht auf mehrere Container, sondern tut sie in den übergeordneten Container, der die Groupboxes enthält.
    Normal würden die Groupboxes die RBs nun überdecken, aber wenn die Groupboxes "im Hintergrund" sind, und die RBs "im Vordergrund" - dann sind die RBs sichtbar.
    Und es sieht so aus, als lägen sie in den Groupboxen.
    Was sie aber nicht tun.
    Wie RFG bemerkt, sowas macht Schwierigkeiten, im Designer zu bearbeiten.
    Weitere Schwierigkeiten können sich zeigen, wenn ein flexibles Layout gefordert ist, also wenn man das Form resizen kann. Da die RBs nicht wirklich auf den Groupboxen aufsitzen, kann es sein, dass sie die GP, wo sie eiglich drinne waren, "verlassen".

    wie dem auch sei - ich denk, der TE hat das prob schon von anfang an genau verstanden gehabt - das schliesse ich u.a. aus der Bemerkung

    jan99 schrieb:

    Eine Art graphische Trennlinie habe ich nicht gefunden?
    Was ja eine Alternative zu Groupboxen wäre.

    Trennlinien müsste man allerdings selber zeichnen - Stichwort OwnerDrawing (habich übrigens paar Tuts zu verzapft)
    Um die Trennlinien im WindowStyle des jeweiligen Users zu zeichnen müsste man die Classe ControlPaint hinzuziehen - vlt. hat die ja Methoden zum Zeichnen einer Linie, oder gar eines Rahmens.

    Es gibt auch eine Dll mit grafischen Figuren - iwas mit "...Pack" heisst die. Von der rate ich ab, weil die ist mir nur durch Bugs bekannt.
    @jan99
    Du könntest ein Custom-Control machen.

    VB.NET-Quellcode

    1. Public Class NoContainerGroupBox
    2. Inherits Control
    3. Public Sub New()
    4. End Sub
    5. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    6. MyBase.OnPaint(e)
    7. GroupBoxRenderer.DrawGroupBox(e.Graphics, New Rectangle(0, 0, Width, Height), Text, Font, VisualStyles.GroupBoxState.Normal)
    8. End Sub
    9. End Class