CheckBox, GroupBox

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von menorca.

    CheckBox, GroupBox

    Hi ich suche eine Lösung zu folgendem

    auf einer Form habe ich verschiedene GroupBoxen mit einigen Checkboxen

    wie kann ich per Schleife die GroupBoxen durchlaufen und den Status der darin befindlichen CheckBox auslesen True / False in msgBox
    So listest du alle du alle GroupBoxes auf:

    VB.NET-Quellcode

    1. For Each c As Control In Me.Controls
    2. If TypeOf c Is GroupBox Then
    3. 'das Steuerelement ist eine Groupbox
    4. End If
    5. Next

    Und das selbe machst du dann nochmal für die jeweilige Groupbox, aber diesmal fragst du auf Checkbox ab.
    hallo, hast du das so gemeint

    Quellcode

    1. For Each c As Control In Me.Controls
    2. If TypeOf c Is GroupBox Then
    3. For Each ctrl As Control In c.Controls
    4. If TypeOf ctrl Is CheckBox Then
    5. MsgBox(c.Text)
    6. End If
    7. Next
    8. End If
    9. Next


    jetzt aber nicht alle Gropboxen sondern nur bestimmte
    Prinzipiell ja, aber wenn du in ner MsgBox den Status der CheckBox haben willst, solltest du auch den ausgeben, und nicht den Text der aktuellen GroupBox, wie du es gemacht hast.
    Wenn du nur bestimmte GroupBoxen haben willst, und es nur eine Handvoll sind, dann steck den Code am Besten in eine Funktion, der du das Control übergibst, und ruf die für die GroupBoxen auf.
    Hallo Lupus,

    Danke für deine Anmerkungen.

    zeigst du mir ein Beispiel wie das bei 7 Groupboxen aussehen kann es sind halt 7 Tage einer Woche
    Montag bis Sonntag aus Woche X, die Groupbox hat das Datum und in der Groupbox ist je eine Checkbox.
    wenn der Status (Checked True ist) soll etwas passieren (bei mir soll dann eine Prozedur aufgerufen werden)
    die ich hier nicht angehängt habe, da ich das prüfen in den Groupboxen noch nicht so habe wie ich es brauche.

    Danke für ein Beispiel
    Hallo Forum,

    habe das mit der CheckBox hinbekommen das funktioniert soweit
    ist die Checkbox True wird im Bsp. eine Message ausgegeben.

    Quellcode

    1. '//Checkbox Check
    2. Private Sub CheckBoxCheck(ByVal oContainer As Object, _
    3. Optional ByVal bSubContainerAlso As Boolean = True)
    4. 'Daten auf bereits vorhandenen Datensatz prüfen
    5. If Not IsNothing(oContainer) Then
    6. ' alle Controls des Container-Objekts durchlaufen
    7. For Each oControl As Control In oContainer.Controls
    8. If bSubContainerAlso AndAlso oControl.Controls.Count > 0 Then
    9. CheckBoxCheck(oControl)
    10. Else
    11. ' Sofern es sich um ein CheckBox-Control handelt...
    12. If TypeOf oControl Is CheckBox Then
    13. If DirectCast(oControl, CheckBox).Checked = True Then
    14. 'Befehl ausführen Datensatz prüfen
    15. MsgBox(oContainer.text)
    16. 'Befehl ausführen, speichern oder Update
    17. End If
    18. End If
    19. End If
    20. Next
    21. End If
    22. End Sub


    nun möchte ich so prüfen ob der Datensatz bereits vorhanden ist dann speichern, sonst Update
    damit keine doppelten Einträge gemacht werden
    wie setzt man das um?

    Danke, für eine Verständliche Hilfe
    Evtl. mit einem Dictionary(Of String, Boolean). String wäre der Name der CheckBox, Boolean der Zustand. Dann geht das so

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim checkbox_states As New Dictionary(Of String, Boolean)
    3. Private Sub CheckBoxCheck(ByVal oContainer As Object, _
    4. Optional ByVal bSubContainerAlso As Boolean = True)
    5. 'Daten auf bereits vorhandenen Datensatz prüfen
    6. If Not IsNothing(oContainer) Then
    7. ' alle Controls des Container-Objekts durchlaufen
    8. For Each oControl As Control In oContainer.Controls
    9. If bSubContainerAlso AndAlso oControl.Controls.Count > 0 Then
    10. CheckBoxCheck(oControl)
    11. Else
    12. ' Sofern es sich um ein CheckBox-Control handelt...
    13. If TypeOf oControl Is CheckBox Then
    14. Dim cb As CheckBox = DirectCast(oControl, CheckBox)
    15. ' Überprüfen und speichern
    16. If Not checkbox_states.Contains(cb.Name) Then
    17. ' Gibts noch nicht; neu anlegen
    18. checkbox_states.add(cb.name, cb.checked)
    19. Else
    20. ' Updaten
    21. checkbox_states(cb.name) = cb.Checked
    22. End If
    23. If cb.Checked = True Then
    24. MsgBox(oContainer.text)
    25. End If
    26. End If
    27. End If
    28. Next
    29. End If
    30. End Sub
    31. End Class
    Mit freundlichen Grüßen,
    Thunderbolt
    Hallo Timmi,

    Danke für deine Mühe und Beispiel doch gibst da noch einen Fehler und eine Frage

    wird damit etwa eine CheckBox hinzugefügt? ich will doch Daten prüfen speichern, ändern
    Bilder
    • Unbenannt.gif

      43,1 kB, 1.086×530, 185 mal angesehen
    Jo das wars, doch was soll

    hier eigentlich stehen passieren
    ' Überprüfen und speichern
    ' Gibts noch nicht; neu anlegen
    ' Updaten

    Meine Prüfung sieht derzeit so aus:

    Quellcode

    1. '//
    2. Public Sub _Datenpruefen()
    3. 'Daten auf bereits vorhandenen Datensatz prüfen
    4. Dim mrs As New ADODB.Recordset
    5. Dim mcn As New ADODB.Connection
    6. ''Dim MeinDatum As String = Me.DTPProduktion.Value.ToString("dd.MM.yyyy")
    7. Try
    8. mcn.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _
    9. "Data Source=D:\TPM\Produktionsdaten.mdb")
    10. mrs.Open("SELECT tblProduktion.PDatum, " & _
    11. "tblProduktion.SK, " & _
    12. "tblProduktion.VP, " & _
    13. "tblMaschine.Bezeichnung, " & _
    14. "tblProduktion.MasID, " & _
    15. "tblProduktion.Bemerkung " & _
    16. "FROM tblProduktion LEFT JOIN tblMaschine " & _
    17. "ON tblProduktion.MasID = tblMaschine.MaschineID_P " & _
    18. "WHERE (((tblProduktion.PDatum)=#3/4/2013#) " & _
    19. "AND ((tblProduktion.MasID)=1))", mcn, _
    20. ADODB.CursorTypeEnum.adOpenKeyset, _
    21. ADODB.LockTypeEnum.adLockOptimistic)
    22. If Not (mrs.BOF And mrs.EOF) Then
    23. If Not IsDBNull(mrs.Fields("Bemerkung").Value) Then
    24. MsgBox("Die Maschine: " & mrs.Fields("Bezeichnung").Value & vbCrLf & _
    25. "wurde bereits erfasst!" & vbCrLf & _
    26. "Produktionsdatum: " & mrs.Fields("PDatum").Value & vbCrLf & _
    27. "Schicht: " & mrs.Fields("SK").Value & vbCrLf & _
    28. "Produkte/Stueck: " & mrs.Fields("VP").Value & vbCrLf & _
    29. "Bemerkung: " & mrs.Fields("Bemerkung").Value, MsgBoxStyle.Exclamation, "Daten vorhanden")
    30. Else
    31. MsgBox("Die Maschine: " & mrs.Fields("Bezeichnung").Value & vbCrLf & _
    32. "wurde bereits erfasst!" & vbCrLf & _
    33. "Produktionsdatum: " & mrs.Fields("PDatum").Value & vbCrLf & _
    34. "Schicht: " & mrs.Fields("SK").Value & vbCrLf & _
    35. "Produkte/Stueck: " & mrs.Fields("VP").Value, MsgBoxStyle.Exclamation, "Daten vorhanden")
    36. 'MsgBox("Keine Daten gefunden", MsgBoxStyle.Information, "Daten nicht vorhanden")
    37. End If
    38. End If
    39. mrs.Close()
    40. mrs = Nothing
    41. mcn = Nothing
    42. Catch ex As Exception
    43. MsgBox("Fehler db")
    44. End Try
    45. End Sub


    geht das dann auch so wie ich es meine

    Datensatz hinzufügen mache ich so:
    das gibt es für den Montag bis Sonntag

    Brainfuck-Quellcode

    1. Public Sub _MontagSpeichern()
    2. '#----------------------------------------------------------------- #
    3. '# Deklarationen -------------------------------------------------- #
    4. '#----------------------------------------------------------------- #
    5. Dim con As New OleDbConnection
    6. Dim cmd As New OleDbCommand
    7. Dim cn As New Odbc.OdbcConnection
    8. 'Der sog. ConnectionString, legt Treiber und den Pfad für die Datenbank fest
    9. con.ConnectionString = _
    10. "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    11. "Data Source=D:\TPM\Produktionsdaten.mdb"
    12. cmd.Connection = con
    13. 'Verbindung wird geöffnet
    14. con.Open()
    15. 'Prozedur arbeitet Visualisieren
    16. Me.Cursor = Cursors.WaitCursor
    17. 'Variabeln deklarieren
    18. Dim NrJahr As String = Format(DateTimePicker1.Value, "yyyy")
    19. Dim KW As Integer = ISOWoche(DateTimePicker1.Text)
    20. Dim Fruehschicht As Integer = 1
    21. Dim Spaetschicht As Integer = 2
    22. Dim Nachtschicht As Integer = 3
    23. Dim Frueh As String = "F"
    24. Dim Spaet As String = "S"
    25. Dim Nacht As String = "N"
    26. '--------------------------------------------
    27. 'Datensatz Montag F speichern, hinzufügen ---
    28. '--------------------------------------------
    29. cmd.CommandText = "INSERT INTO tblProduktion (PDatum, NrJahr,NrWoche,Schart,Schicht,MasID,VP,VN,VM,SK) " & _
    30. "VALUES ('" & grpbmontag.Text & "','" & NrJahr & "'," & KW & "," & Fruehschicht & "," & _
    31. Me.DS1.Text & "," & Me.CBMaschine.SelectedValue & "," & Me.TBMoFVolumen.Text & "," & _
    32. Me.TBMoFNacharbeit.Text & "," & CDec(Me.TBMoFMitarbeiter.Text) & ",'" & Frueh & "');"
    33. 'Befehl ausführen danach sollten die Daten in der Tabelle sein
    34. cmd.ExecuteNonQuery()
    35. '--------------------------------------------
    36. 'Datensatz Montag S speichern, hinzufügen ---
    37. '--------------------------------------------
    38. cmd.CommandText = "INSERT INTO tblProduktion (PDatum, NrJahr,NrWoche,Schart,Schicht,MasID,VP,VN,VM,SK) " & _
    39. "VALUES ('" & grpbmontag.Text & "','" & NrJahr & "'," & KW & "," & Spaetschicht & "," & _
    40. Me.DS2.Text & "," & Me.CBMaschine.SelectedValue & "," & Me.TBMoSVolumen.Text & "," & _
    41. Me.TBMoSNacharbeit.Text & "," & CDec(Me.TBMoSMitarbeiter.Text) & ",'" & Spaet & "');"
    42. 'Befehl ausführen danach sollten die Daten in der Tabelle sein
    43. cmd.ExecuteNonQuery()
    44. '--------------------------------------------
    45. 'Datensatz Montag N speichern, hinzufügen ---
    46. '--------------------------------------------
    47. cmd.CommandText = "INSERT INTO tblProduktion (PDatum, NrJahr,NrWoche,Schart,Schicht,MasID,VP,VN,VM,SK) " & _
    48. "VALUES ('" & grpbmontag.Text & "','" & NrJahr & "'," & KW & "," & Nachtschicht & "," & _
    49. Me.DS3.Text & "," & Me.CBMaschine.SelectedValue & "," & Me.TBMoNVolumen.Text & "," & _
    50. Me.TBMoNNacharbeit.Text & "," & CDec(Me.TBMoNMitarbeiter.Text) & ",'" & Nacht & "');"
    51. 'Befehl ausführen danach sollten die Daten in der Tabelle sein
    52. cmd.ExecuteNonQuery()
    53. 'Verbindung wieder schließen
    54. cn.Close()
    55. Me.Cursor = Cursors.Default
    56. End Sub
    Hallo zusammen,

    ich gebe zu das ich mein Begehren die Daten zu speichern evtl. etwas kompliziert umgesetzt habe.
    vergesst also obige Code Schnippsel, habe es doch auf die Reihe bekommen und sogar mit meiner Progressbar.
    Daten werden nur gespeichert wenn die CheckBox True ist, und der Datensatz noch nicht vorhanden ist.

    Bei Intresse werde ich das hier hochladen aber im Augenblick ist mir der Code dafür etwas zu lang.

    Wünsche schönen Abend, und Danke an die Thread Teilnehmer