Benutzer mit den meisten Antworten
Mit If GroupBox zeigen oder auch nicht

Frage
-
Hallo Leute,
in meinem kleinen Prog sollen in Form2 (je nach Auswahl in Form1) unterschiedlich viele GroupBoxes mit je 3 RadioButton angezeigt werden und unter der letzten GroupBox ein Button zum Bestätigen der Auswahl.
Bisher habe ich nur etwas mit unsichtbar machen der GroupBox zum Laufen gebracht, was aber den negativen Effekt hat, dass zwischen der sichtbaren GroupBox und dem Button eine erhebliche Lücke im Form2 entsteht.
Wie muss ich dem Button sagen dass er aufschließen soll oder ist der Ansatz generell falsch?
Gibt es vielleicht andere Mittel und Möglichkeiten? Für jede Auswahl eine eigene Form?
So schauen im Moment meine Forms aus:
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Form2.SelectedIndex = ComboBox1.SelectedIndex If Form2.SelectedIndex = "0" Then Form2.Label1.Text = "Du Scherzkeks^^" ElseIf Form2.SelectedIndex = "1" Then Form2.Label1.Text = "Es gibt 27 Möglichkeiten" Form2.GroupBox2.Visible = False ElseIf Form2.SelectedIndex = "2" Or "3" Then Form2.Label1.Text = "Es gibt 81 Möglichkeiten" End If Form2.Show() End Sub End Class
Public Class Form2 Private m_SelectdIndex As Integer Public Property SelectedIndex() As Integer Get Return m_SelectdIndex End Get Set(ByVal value As Integer) m_SelectdIndex = value End Set End Property Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged End Sub Private Sub GroupBox2_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox2.Enter End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged End Sub Private Sub RadioButton5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton5.CheckedChanged End Sub Private Sub RadioButton6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton6.CheckedChanged End Sub End Class
Bin für jeden Tipp offen^^ und sag schon mal danke
Schnuffel2
Antworten
-
Hallo Schnuffel2,
mit der AutoSize Eigenschaft kannst Du Steuerelemente wie die GroupBox,
dazu veranlassen, sich an den Inhalt anzupassen.
Setzt Du die Visible Eigenschaft für eine GroupBox auf False "rutscht" der
darunterliegende Inhalt nach oben.
Noch etwas eleganter funktioniert es, wenn man die Steuerelemente,
hier GroupBox(en) in ein TableLayoutPanel verpackt. Mehr dazu:
TableLayoutPanel-Steuerelement (Windows Forms)Du solltest im übrigen Option Strict On aktivieren,
denn z. B. SelectedIndex ist eine Integer Eigenschaft.
Dadurch wird der Code langsamer und vor allem fehleranfälliger.Am besten gleich für das Projekt (unter Einstellungen) aktivieren
und für die Zukunft unter Extras-Optionen als Standard.Gruß Elmar
- Als Antwort markiert Thorsten Dörfler Dienstag, 8. Juni 2010 18:59
-
Hallo Schnuffel2,
arbeite in Form2 mit einem TabletLayoutPanel mit 4 Spalten.
In jede Spalte packe eine GroupBox mit deinem Inhalt. Je nachdem, ob du Form2 Sizeable oder mit fester Größe hast, verwende für das TabletLayoutPanel entsprechende Dock-Eigenschaften.
Für das TabletLayotPanel kannst du ebenfalls fixe Werte in Pixel oder variable Werte in Prozent bzw. Automatisch eingeben. Das musst du deinem Geschmack und den Bedürfnissen anpassen.Ich habe das mal ausprobiert und wahlweise von GroupBox1, GroupBox2 .. bis 4 über die ButtonClick-Methode geandelt bzw dann auch mal GroupBox1 und 3 anzeigen lassen. Das sah dann so aus, dass beide Groupboxes direkt (also ohne den beanstandeten Zwischenraum) dargestellt wurden.
Erscheinen und veschwinden lassen hast du ja bereits hinbekommen, die If Then - Anweisung ist auch nicht dein Problem.
Die Lösung sollte also die Kobination TabletLayoutPanel in 4 Spalten und der richtigen Dock-Methode sein.Von der Idee, für jedes Szenario eine eigen Form zu verwenden rate ich ab. Das scheint mir einerseits unnötig und zum anderen sehr fehlerträchtig wenn du später einmal noch eine Funktion in Form1 dazu machst.
Ich hoffe, die Antwort hilft dir weiter.
Liebe Grüße Stefan- Als Antwort markiert Thorsten Dörfler Dienstag, 8. Juni 2010 18:59
Alle Antworten
-
Hallo Schnuffel2,
mit der AutoSize Eigenschaft kannst Du Steuerelemente wie die GroupBox,
dazu veranlassen, sich an den Inhalt anzupassen.
Setzt Du die Visible Eigenschaft für eine GroupBox auf False "rutscht" der
darunterliegende Inhalt nach oben.
Noch etwas eleganter funktioniert es, wenn man die Steuerelemente,
hier GroupBox(en) in ein TableLayoutPanel verpackt. Mehr dazu:
TableLayoutPanel-Steuerelement (Windows Forms)Du solltest im übrigen Option Strict On aktivieren,
denn z. B. SelectedIndex ist eine Integer Eigenschaft.
Dadurch wird der Code langsamer und vor allem fehleranfälliger.Am besten gleich für das Projekt (unter Einstellungen) aktivieren
und für die Zukunft unter Extras-Optionen als Standard.Gruß Elmar
- Als Antwort markiert Thorsten Dörfler Dienstag, 8. Juni 2010 18:59
-
Hallo Schnuffel2,
arbeite in Form2 mit einem TabletLayoutPanel mit 4 Spalten.
In jede Spalte packe eine GroupBox mit deinem Inhalt. Je nachdem, ob du Form2 Sizeable oder mit fester Größe hast, verwende für das TabletLayoutPanel entsprechende Dock-Eigenschaften.
Für das TabletLayotPanel kannst du ebenfalls fixe Werte in Pixel oder variable Werte in Prozent bzw. Automatisch eingeben. Das musst du deinem Geschmack und den Bedürfnissen anpassen.Ich habe das mal ausprobiert und wahlweise von GroupBox1, GroupBox2 .. bis 4 über die ButtonClick-Methode geandelt bzw dann auch mal GroupBox1 und 3 anzeigen lassen. Das sah dann so aus, dass beide Groupboxes direkt (also ohne den beanstandeten Zwischenraum) dargestellt wurden.
Erscheinen und veschwinden lassen hast du ja bereits hinbekommen, die If Then - Anweisung ist auch nicht dein Problem.
Die Lösung sollte also die Kobination TabletLayoutPanel in 4 Spalten und der richtigen Dock-Methode sein.Von der Idee, für jedes Szenario eine eigen Form zu verwenden rate ich ab. Das scheint mir einerseits unnötig und zum anderen sehr fehlerträchtig wenn du später einmal noch eine Funktion in Form1 dazu machst.
Ich hoffe, die Antwort hilft dir weiter.
Liebe Grüße Stefan- Als Antwort markiert Thorsten Dörfler Dienstag, 8. Juni 2010 18:59
-
Hallo Schnuffel2,
ich lerne immer besonders gut durch Videos.
Hier ein Link zu TableLayoutPanel:
http://windowsclient.net/learn/video.aspx?v=12393
Die ganz harte Tour wäre, das oder die Controls in Abhängigkeit der Optionsschalter zur Laufzeit zu erzeugen. Dann hast du allerdings zusätzlich die Arbeit damit die Elemenete zu positionieren, zu benennen und alles, was du innerhalb der Gruppe verwalten möchtest auch erst zu erzeugen. Da finde ich meinen ersten Tipp mit TabeleLayotPanel effizienter und wie ich sehe, findet Elmar das ebenfalls eine elegante Lösung ;-) (freu).
Ein Weg, währen der Laufzeit eine GroupBox für Form2 zu erzeugen wäre:
Dim GB As New GroupBox
Form2.Controls.Add(GB)
GB.Dock = DockStyle.Left 'Position der GroupBox links
GB.Text = " Giftzwockel " 'Text der GroupBox
GB.ForeColor = Color.SteelBlue 'Schriftfarbe der GroupBox
GB.Parent = Form2
Viel Erfolg
Liebe Grüße Stefan- Bearbeitet Giftzwockel Mittwoch, 14. April 2010 20:28 Format
-
Hallo Schnuffel2,
hier noch ein interessanter Link zum Thema Layoutcontainer:
http://openbook.galileocomputing.de/visualbasic_2008/vb2008_20_wpf_container_001.htm
Liebe Grüße Stefan