Anzahl der Gesammten Checkboxen auf dem Form

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Anarchiyx3.

    Anzahl der Gesammten Checkboxen auf dem Form

    Hallo Leute

    Gibt es eine möglich die Anzahl aller Checkboxen im Form herrauszufinden. ?

    Weil ich möchte es soo machen alle Checkboxen die ("Gecheckt sind") soll er speichern also dem Namen und dafür brauch ich die Anzahl aller Checkboxen.. Die Checkboxen werden nicht so erstellt sondern über das Form_Load...

    VB.NET-Quellcode

    1. Dim counter As Integer = 0
    2. For Each el As Control In Me.Controls
    3. If TypeOf(el) Is CheckBox Then
    4. Dim cb As CheckBox = DirectCast(el,CheckBox)
    5. 'cb ist die CheckBox
    6. counter +=1
    7. End If
    8. Next

    Mit LinQ würde das wohl noch in einer Zeile gehen^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    x= cb.Text überschreibt jedesmal die Variable du willst es ja hinzufügen, also verwende doch den Stringverknüpfungsoperator &...

    VB.NET-Quellcode

    1. x &= cb.Text & Environment.NewLine

    Die Variable muss natürlich außerhalb der Schleife deklariert werden...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    VB.NET-Quellcode

    1. For Each el As Control In Me.Controls
    2. If TypeOf (el) Is CheckBox Then
    3. Dim cb As CheckBox = DirectCast(el, CheckBox)
    4. If (cb.Checked = True) Then
    5. If (My.Computer.FileSystem.FileExists(Application.StartupPath & "\schleifen.txt")) Then
    6. My.Computer.FileSystem.DeleteFile(Application.StartupPath & "\schleifen.txt")
    7. End If
    8. IO.File.WriteAllText(Application.StartupPath & "\schleifen.txt", cb.Text & Environment.NewLine)
    9. End If
    10. End If
    11. Next


    Er schreibt mir nur den letzten Checkbox Namen rein..

    VB.NET-Quellcode

    1. For Each el As Control In Me.Controls 'Controls durchgehen
    2. If TypeOf (el) Is CheckBox Then 'Erbt das Control vom Combobox-Typ oder ist es eine Instanz des ComboBox-Typs?
    3. Dim cb As CheckBox = DirectCast(el, CheckBox)'Wenn ja, dann casten wir das zu ner Combobox
    4. If (cb.Checked = True) Then'Wenn das Häckchen gesetzt ist
    5. If (My.Computer.FileSystem.FileExists(Application.StartupPath & "\schleifen.txt")) Then 'Löschen wir eine eventuell bereits vorhandene Datei
    6. My.Computer.FileSystem.DeleteFile(Application.StartupPath & "\schleifen.txt")
    7. End If
    8. IO.File.WriteAllText(Application.StartupPath & "\schleifen.txt", cb.Text & Environment.NewLine) 'Und schreiben den aktuellen Text der ComboBox in eine komplett neue Datei
    9. End If
    10. End If
    11. Next'nächstes Control

    Jetzt klar, warums nicht funktioniert? Du erstellst die Datei im einen Schleifendurchlauf und überschreibst sie im nächsten gleich wieder. Wie gesagt, du solltest zum IO.StreamWriter wechseln oder - noch besser - eine Enumeration mit dem Flags-Attribut verwenden, wo du die einzelnen Bits setzen kannst. Die Enumeration muss dann nur alle Einstellungen enthalten, die durch die ComboBoxen verwaltet werden sollen. Anschließend kannst du die Enumeration rausschreiben (eventuell als Zahl, oder als String).

    Gruß
    ~blaze~

    VB.NET-Quellcode

    1. 'Instanz erzeugen --> IntelliSense wuerde helfen
    2. Dim writer As New IO.StreamWriter(IO.Path.Combine(Application.StartupPath, "schleifen.txt"))
    3. 'mal alle Methoden durchschaun und das hier finden:
    4. writer.WriteLine("Text") 'Text schreiben
    5. writer.Close() 'Zum Abschluss noch schließen, wie's beim Stream auch ist


    Mehr Hilfestellung brauchst du nicht. ;) Versuch in Zukunft, nach Intellisense und dessen Beschreibungen vorzugehen. Da lernst du viel und kommst bald gut mit dem Framework und anderen Libraries zurecht.

    Gruß
    ~blaze~
    Ohh danke soo jetzt noch nee Frage :X
    Jetzt habe ich es genauso gemacht wie bei StreamWrite nur es geht leider nicht soo :X Aber eigentlich sollte es doch soo gehen ?(

    VB.NET-Quellcode

    1. Dim reader As New IO.StreamReader(IO.Path.Combine(Application.StartupPath, "schleifen.txt"))
    2. For Each el As Control In Me.Controls 'Controls durchgehen
    3. If TypeOf (el) Is CheckBox Then 'Erbt das Control vom Combobox-Typ oder ist es eine Instanz des ComboBox-Typs?
    4. Dim cb As CheckBox = DirectCast(el, CheckBox) 'Wenn ja, dann casten wir das zu ner Combobox
    5. If (cb.Text = reader.ReadToEnd) Then
    6. cb.Checked = True
    7. End If
    8. End If
    9. Next
    10. reader.close

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

    Nein, das funktioniert so natürlich nicht. Du liest mit ReadToEnd ein mal den ganzen Inhalt aus und vergleichst den Text dann mit der CheckBox. Geschickter ist das so:

    VB.NET-Quellcode

    1. Dim reader As New IO.StreamReader(IO.Path.Combine(Application.StartupPath, "schleifen.txt"))
    2. Dim ctrl As Control
    3. Do Until reader.EndOfStream
    4. ctrl = Me.Controls(reader.ReadLine.Trim)
    5. If TypeOf ctrl Is CheckBox Then DirectCast(ctrl, CheckBox).Checked = True
    6. Loop
    7. reader.Close()


    Voraussetzung ist allerdings, dass du nicht den Text, sondern den Namen der CheckBox schreibst.

    VB.NET-Quellcode

    1. Dim writer As New IO.StreamWriter(IO.Path.Combine(Application.StartupPath, "schleifen.txt"))
    2. For Each ctrl As Control In Me.Controls
    3. If TypeOf ctrl Is CheckBox Then
    4. If DirectCast(ctrl, CheckBox).Checked Then writer.WriteLine(ctrl.Name)
    5. End If
    6. Next
    7. writer.Close()

    Gruß
    ~blaze~