Wie vermeiden Sie die Windows Forms-radio-button-container-auto-Gruppierung

Hintergrund

In .NET Windows Forms (2.0) radio-buttons sind automatisch gruppiert nach container-Steuerelement, ob es eine Form, Panel oder GroupBox.

Dass bedeutet, dass, wenn Sie wählen Sie einen radio-button, alle anderen radio-button den selben container wird automatisch geändert, ungeprüften Zustand.

Betrachten Sie nun das folgende Formular layout:

MUST HAVE  NICE TO HAVE  DESCRIPTION
---------  ------------  -----------------------------------------------
   [ ]          [ ]      The gizmo works
   [ ]          [ ]      The gizmo works beautifully
   [ ]          [ ]      The gizmo works amazingly and makes you breakfast
   [ ]          [ ]      The gizmo comes with a pony
  • Jeder '[ ]' ist ein radio-button.
  • Der Benutzer wird aufgefordert, wählen Sie die erforderlich Antwort in der ersten Spalte, und die optional (gewünschte, best-case-Antwort) in der Spalte 2.

Wie Sie sehen können, die radio-buttons gruppiert werden soll nach Spalte: Auswahl eines der radios sollte klar den rest der Spalte, die aber keinen Effekt haben sollte, in die andere Spalte.

Das problem

Grundsätzlich das problem ist, dass dies eine dynamisch generierte form.

  • Die Anzahl der Zeilen in der layout ist dynamisch und es ist geladen von einer konfigurierbaren form-definition.
  • Die Beschreibung erst zur Laufzeit bekannt ist und die Längen sehr unterschiedlich sind (einige haben vielleicht nur ein paar Worte, und einige andere ein Dutzend Zeilen).
  • Das layout nicht überarbeitet werden. Dies kommt von der Vertrautheit der (nicht-technische) Benutzer mit der Papier-version dieser form seit Jahren erfolgreich im Einsatz. Dieses Formular wird auch gedruckt und auch wenn ich änderte das input-system auf meinem Formular das würde bedeuten, dass die Codierung eine andere version für den Druck mit dem "alten" layout.

Was habe ich versucht und hat nicht funktioniert

Zuerst habe ich versucht zu implementieren, dies als eine dynamisch generierte layout mit drei Platten, eine für jede Spalte, also die automatische radio-button-Gruppierung funktionieren würde just fine. Und er Tat es.

Aber die layout-Probleme im Zusammenhang mit der horizontalen Ausrichtung zwischen den radio-buttons und seine text sind einfach, mich zu töten. Die Größe des Textes erst zur Laufzeit bekannt ist und die Textzeilen umbrochen kann (manchmal mehrere Male für jedes Element). Manchmal richtet er korrekt, manchmal nicht. Ich bin über den Debugger zu starten, aber ich bin am überlegen ob vielleicht eine änderung dieses drei-panel-Umsetzung ist eine bessere option.

, Was ich versuche zu tun,

Möchte ich die Neugestaltung des layout durch die Verwendung einer TableLayoutPanel mit drei Spalten zwecks Vereinfachung der Ausrichtung relevanter Themen, aber das bedeutet, dass ich nicht verwenden können, die automatische radio-button-Gruppierung-von-container "feature".

EDIT:

Als Gerrie vorgeschlagen, andere layout-option, um jede einzelne Zeile umgesetzt werden, da ein Benutzer-Steuerelement, und verwenden Sie ein flow-layout-panel.

Das bedeutet wieder, dass ich vielleicht benutzen, Steuerelemente für das layout, aber nicht für die radio-Schaltfläche Gruppierung.

Würde ich brauchen, um vertikale radio-button-Gruppen, trotz Verwendung von horizontal-Bedienelemente

/EDIT

, Was ich bin versucht zu Fragen,

Ich brauche Tipps und Vorschläge, wie manuell Steuern, der Vereinigung der radio-buttons. Ich wirklich don ' T mind Unterklassen der RadioButton Klasse, wenn nötig.

Speziell, gibt es eine 'kanonische' oder bekannten Unterklassen 'RadioButton' oder gehen Sie den ganzen Weg nach unten, um Win32-APIs, so dass jedes mal, wenn die Kontrolle aktiviert ist (mit der Maus, der Tastatur Eingeben, die Leertaste und die andere Weise, ich konnte nicht bewusst sein, wenn Sie Sie auswählen) ich kann die trap-Ereignis und aktualisieren Sie manuell den Zustand von jedem anderen Steuerelement auf dem Formular und in einer Weise, dass die automatische Gruppierung-Funktion ist gut bekannt, "de-aktiviert"? Ich fürchte, dass die Umsetzung auch container-Fragen, und ich könnte auch gezwungen Unterklasse Panel?.

Wie funktioniert die Gruppierung "Magie" funktioniert in Windows Forms?

Jede Lösung, die ich gefunden haben, googeln, die custom radio-button-Gruppen oder "radio-button-Listen" basiert, in irgendeiner Weise bei der Verwendung eines Containers für die Gruppe. Kann Behältern vermieden werden? Wenn ja, wie?.

Schreibe einen Kommentar