none
Mit If GroupBox zeigen oder auch nicht RRS feed

  • 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

    Mittwoch, 14. April 2010 16:08

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

     

    Mittwoch, 14. April 2010 16:39
  • 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
    Mittwoch, 14. April 2010 17:02

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

     

    Mittwoch, 14. April 2010 16:39
  • 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
    Mittwoch, 14. April 2010 17:02
  • 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
    Mittwoch, 14. April 2010 18:41
  • Hallo Elmar und Giftzwockel

     

    Danke erst mal für Eure Tipps. Werd es gleich mal austesten^^

     

    Gruß Schnuffel2

     

    Donnerstag, 15. April 2010 16:55
  • 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
    Sonntag, 18. April 2010 19:18
  • Hallo Schnuffel,

    ist schon eine Weile her deine Frage, bist du voran gekommen oder gibts noch Fragen?

     


    Liebe Grüße Stefan
    Montag, 7. Juni 2010 21:16