Checkboxen in Groupbox entchecken

  • VB.NET

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Checkboxen in Groupbox entchecken

    Hallo Zusammen,

    ich habe ein Groupbox und darin sind mehrere Checkboxen und Textboxen enthalten.

    Ich möchte per Buttonklick alle Textboxen leeren und bei allen Checkboxen den Hacken entfernen. Habe bereits hier im Forum rumgesucht, jedoch funktionieren bei mir die Lösungen nicht und weiß nicht weshalb.

    Hier mein bisheriger Code:

    VB.NET-Quellcode

    1. Private Sub NeueingabeButton_Click(sender As System.Object, e As System.EventArgs) Handles NeuButton.Click
    2. Dim cbFound As CheckBox
    3. For Each ctl As Control In BasisGroupBox.Controls
    4. If TypeOf ctl Is CheckBox Then
    5. cbFound = ctl
    6. cbFound.Checked = False
    7. End If
    8. Next ctl
    9. For Each Textboxenleeren In BasisGroupBox.Controls
    10. If TypeName(Textboxenleeren) = "TextBox" Then
    11. Textboxenleeren.Text = Nothing
    12. End If
    13. Next
    14. End Sub




    Die Textboxen werden geleert, jedoch bei den Checkboxen werden die Hacken nicht entfernt.



    Hat jemand eine Ahnung?
    ...hier mal ein kleiner Anstoß! :D

    Hier für deine CheckBoxen! Jeweils den Wert "False/True" wunschgemäß einstellen!

    VB.NET-Quellcode

    1. For Each CheckBox In Me.Controls.OfType(Of CheckBox)()
    2. CheckBox.Checked = False
    3. Next


    ...und hier dann für deine TextBoxen!

    VB.NET-Quellcode

    1. For Each TextBox In Me.Controls.OfType(Of TextBox)()
    2. TextBox.Clear()
    3. Next

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

    @FreShmaker:
    Me.Controls kann's nicht sein, da die CheckBoxen der GroupBox untergeordnet sind.
    Also BasisGroupBox.Controls.

    Nebenbei: Variablennamen sollten keine Typennamen sein.
    CheckBox ist ein Typ. Das erschwert das Erkennen von Shared Properties und normalen Properties.
    Für Iterationsvariablen nimmt man meistens i.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

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

    @Niko Ortner

    Bei mir funktioniert es wunderbar! Ein Fehler gibt es nicht. Ich habe eben auf openbook.de nachgesehen, und dort ist es eine gängige und empfehlenswerte Methode. Selbes zu finden auf MSDN ! :thumbsup:

    Das mit der GroupBox habe ich übersehen, kann der TE aber selbstständig ändern. Die Interaktionsvariable habe ich deshalb nicht umbenannt, da ich es für überflüssig halte. Eine Komplikation zu dieser Variante ist nicht bekannt. Falls doch, bitte ich um Rückmeldung.



    Liebe Grüße....

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

    @All: Was, wenn da mehrere GroupBoxen sind, die einzeln behandelt werden sollen?
    @toeller: Gib zunächst Deinem Projekt Option Strict On
    Hier ein Snippet, mit dem Du in einzelnen GroupBoxen die Check- und TextBoxen clearen kannst:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. Reset(GroupBox1)
    4. End Sub
    5. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    6. Reset(GroupBox2)
    7. End Sub
    8. Private Sub Reset(BasisGroupBox As GroupBox)
    9. For Each ctl As Control In BasisGroupBox.Controls
    10. If TypeOf ctl Is CheckBox Then
    11. DirectCast(ctl, CheckBox).Checked = False
    12. End If
    13. Next ctl
    14. For Each Textboxenleeren In BasisGroupBox.Controls
    15. If TypeOf Textboxenleeren Is TextBox Then
    16. DirectCast(Textboxenleeren, TextBox).Text = Nothing
    17. End If
    18. Next
    19. End Sub
    20. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @FreShmaker:

    VB.NET-Quellcode

    1. Dim Liste As New List(Of RectangleF)
    2. Private Sub Test() Handles Button1.Click
    3. For Each Rectangle In Liste
    4. Rectangle.DoSomething()
    5. Next
    6. Rectangle.DoSomething()
    7. End Sub
    8. Public Class Rectangle
    9. Public Shared Sub DoSomething()
    10. End Sub
    11. End Class
    12. Public Class RectangleF
    13. Public Sub DoSomething()
    14. End Sub
    15. End Class

    Worin unterscheiden sich jetzt Zeile 5 und Zeile 7?
    Es ist so schwieriger zu erkennen. Und hier ist es noch einfacher, weil es so wenig Code ist.
    Wenn das aber nicht so offensichtlich ist, dass das Rectangle bei Zeile 5 eine Instanz von RectangleF ist, und bei Zeile 7 die Klase gemeint ist, dann kann es leicht zu Verwechslungen kommen.
    Erst recht, wenn man die Klasse noch nicht kennt.
    Z.B. sowas hier:

    VB.NET-Quellcode

    1. Dim Liste As New List(Of WrapperForSomething)
    2. Private Sub Test() Handles Button1.Click
    3. For Each WrapperForSomething In Liste
    4. WrapperForSomething.DoSomething()
    5. Next
    6. End Sub

    Ist es jetzt eine Instanzmethode oder eine Klassenmethode?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Dann sollte vielleicht @toeller: mal etwas genauer schreiben, was er eigentlich will. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo Zusammen,

    sorry, dass ich mich jetzt erst wieder melde.

    Ich habe den Code von RodFromGermany getestet.
    Da erhalte ich aber leider folgenden Fehler:


    Das Objekt des Typs "System.Windows.Forms.GroupBox" kann nicht in Typ "Microsoft.Office.Interop.Excel.GroupBox" umgewandelt werden.



    Option Strict on kann ich leider nicht setzen, weil da erhalte ich jede Menge Fehler:

    -Fehler 7 "Option Strict On" erfordert, dass alle Variablendeklarationen eine As-Klausel enthalten. C:\Users\toeller\Documents\Visual Studio 2010\Projects\Anfrageformulare\Anfrageformulare\Formular Vorgespannte Granitbrücken.vb 243 13 Anfrageformulare
    -Fehler 15 "Option Strict On" lässt keine impliziten Konvertierungen von Object in Microsoft.Office.Interop.Excel.Worksheet zu. C:\Users\toeller\Documents\Visual Studio 2010\Projects\Anfrageformulare\Anfrageformulare\Formular Vorgespannte Granitbrücken.vb 272 42 Anfrageformulare
    -Fehler 4 "Option Strict On" lässt keine impliziten Konvertierungen von Object in String zu. C:\Users\toeller\Documents\Visual Studio 2010\Projects\Anfrageformulare\Anfrageformulare\Formular Vorgespannte Granitbrücken.vb 69 48 Anfrageformulare
    -Fehler 2 "Option Strict On" lässt keine impliziten Konvertierungen von String in Char zu. C:\Users\toeller\Documents\Visual Studio 2010\Projects\Anfrageformulare\Anfrageformulare\Formular Vorgespannte Granitbrücken.vb 11 25 Anfrageformulare
    Fehler 8 "Option Strict On" lässt Operanden des Typs "Object" für den <>-Operator nicht zu. Verwenden Sie den Is-Operator, wenn Sie die Objektidentität testen möchten. C:\Users\toeller\Documents\Visual Studio 2010\Projects\Anfrageformulare\Anfrageformulare\Formular Vorgespannte Granitbrücken.vb 246 12 Anfrageformulare


    usw.



    Hier mal mein gesamter Code:


    VB.NET-Quellcode

    1. Imports Microsoft.Office.Interop
    2. Imports Microsoft.Office.Interop.Excel 'Musste unter Projekteigenschaften Verweise auf Lokale Kopie auf True umgestellt werden.
    3. Imports MSScriptControl
    4. Imports System.Text.RegularExpressions
    5. Public Class Formular_schwimmende_Granitkugel
    6. Dim exApp As Excel.Application = New Excel.Application()
    7. Dim exwb As Excel.Workbook
    8. Dim exsh As Excel.Worksheet
    9. Dim Wuchten As Excel.Range
    10. Dim Bearbeiter As Excel.Range
    11. Dim Speicherort As Excel.Range
    12. Private Sub Formularausgabe()
    13. With exApp
    14. .Visible = True
    15. exwb = .Workbooks.Open("C:\Test\Fragebogen Schw. Kugel_Granitwerke_mg_12.07.2012.xlsx") 'Hier wurde der Vorlagepfad unter Projekteigenschaft Einstellungen hinterlegt
    16. exsh = CType(exwb.Sheets(1), Worksheet)
    17. Wuchten = exsh.Range("D7")
    18. 'Bearbeiter = exsh.Range("B5")
    19. 'Wuchten.Value =
    20. If AuswuchtenJaCheckBox.Checked = True Then
    21. Wuchten.Value = "X"
    22. End If
    23. 'Bearbeiter.Value = BearbeiterComboBox.Text
    24. exsh.Protect(Password:="") 'Hiermit wird in Excel der Passwortschutz aktiviert ohne Passwort
    25. End With
    26. End Sub
    27. Private Sub Druckfunktion()
    28. With exApp
    29. exsh.Range("A1:D73").PrintOut()
    30. End With
    31. End Sub
    32. Private Sub SpeicherfunktionFreieOrdnerwahl()
    33. Dim varRetVal As Object, Datname As String
    34. Datname = "Test"
    35. varRetVal = exApp.GetSaveAsFilename( _
    36. InitialFilename:=Datname, _
    37. FileFilter:="Microsoft Excel-Dateien (*.xlsx), *.xlsx", _
    38. Title:="Datei speichern unter ... ") 'Überschrift Speicherndialog
    39. If varRetVal = Nothing Then
    40. exApp.Quit()
    41. Exit Sub
    42. End If
    43. exwb.SaveAs(varRetVal)
    44. exApp.Quit()
    45. End Sub
    46. Private Sub ProjektordnerErstellen()
    47. Dim Projektordnerpfad As String
    48. Projektordnerpfad = "C:\Test"
    49. If System.IO.Directory.Exists(Projektordnerpfad) = False Then
    50. System.IO.Directory.CreateDirectory(Projektordnerpfad)
    51. MsgBox("Ordner angelegt unter" & Projektordnerpfad)
    52. Else
    53. MsgBox("Projektordner existiert bereits!")
    54. End If
    55. End Sub
    56. Private Sub SpeicherfunktionImProjektordner()
    57. Dim Dateipfad As String
    58. Dateipfad = "C:\Test\Test.xlsx"
    59. If System.IO.File.Exists(Dateipfad) = False Then
    60. exwb.SaveAs(Dateipfad)
    61. Else
    62. MsgBox("Gleiche Datei existiert bereits!")
    63. End If
    64. End Sub
    65. 'folgende Sub wird bis dato noch nicht benötigt, hier kann Outlook geöffnet und eine Datei angehängt werden.
    66. Private Sub Outlooköffnen()
    67. On Error Resume Next
    68. Dim outl
    69. outl = GetObject(, "Outlook.Application")
    70. If outl <> "Microsoft Outlook" Then
    71. outl = CreateObject("Outlook.Application")
    72. On Error GoTo 0
    73. End If
    74. Dim myMail = outl.CreateItem(0)
    75. myMail.Subject = "TESTMAIL"
    76. Dim myAttch = myMail.Attachments
    77. myAttch.add("C:\Test\vorlage.xltx", 1, 1)
    78. myMail.Save()
    79. myMail.display()
    80. End Sub
    81. Private Sub EmailVersand()
    82. 'exwb.SendMail("", "Anfrage Brücke " & FirmaTextBox.Text & " " & PLZOrtTextBox.Text, False) 'Zwischen den beiden "" kann der E-Mailempfänger eingetragen werden. Wird aus False True gemacht, so wird die E-Mail automatisch versendet.
    83. exwb.SendMail("", DatumDateTimePicker.Value.Year & " - " & DatumDateTimePicker.Value.Month & " - " & DatumDateTimePicker.Value.Day & " Anfrage Brücke " & FirmaTextBox.Text & " " & PLZOrtTextBox.Text, False) 'Zwischen den beiden "" kann der E-Mailempfänger eingetragen werden. Wird aus False True gemacht, so wird die E-Mail automatisch versendet.
    84. End Sub
    85. Private MyLine As Integer = 3
    86. Private Sub NeueingabeButton_Click(sender As System.Object, e As System.EventArgs) Handles NeuButton.Click
    87. Dim Textboxenleeren As Control
    88. For Each Textboxenleeren In AnschriftGroupBox.Controls
    89. If TypeName(Textboxenleeren) = "TextBox" Then
    90. Textboxenleeren.Text = Nothing
    91. End If
    92. Next
    93. For Each Textboxenleeren In KontaktGroupBox.Controls
    94. If TypeName(Textboxenleeren) = "TextBox" Then
    95. Textboxenleeren.Text = Nothing
    96. End If
    97. Next
    98. For Each Textboxenleeren In KugelGroupBox.Controls
    99. If TypeName(Textboxenleeren) = "TextBox" Then
    100. Textboxenleeren.Text = Nothing
    101. End If
    102. Next
    103. For Each Textboxenleeren In BasisGroupBox.Controls
    104. If TypeName(Textboxenleeren) = "TextBox" Then
    105. Textboxenleeren.Text = Nothing
    106. End If
    107. Next
    108. For Each Textboxenleeren In ZubehörGroupBox.Controls
    109. If TypeName(Textboxenleeren) = "TextBox" Then
    110. Textboxenleeren.Text = Nothing
    111. End If
    112. Next
    113. For Each Textboxenleeren In Me.Controls
    114. If TypeName(Textboxenleeren) = "TextBox" Then
    115. Textboxenleeren.Text = Nothing
    116. End If
    117. Next
    118. End Sub
    119. Private Sub SpeichernFreieOrdnerwahlButton_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    120. If InitialienTextBox.Text = Nothing Then
    121. MsgBox("Bitte Initialien eingeben!")
    122. Exit Sub
    123. End If
    124. If ProjektnameTextBox.Text = Nothing Then
    125. MsgBox("Bitte Projektname eingeben!")
    126. Exit Sub
    127. End If
    128. If FirmaTextBox.Text = Nothing Then
    129. MsgBox("Bitte Firma eingeben!")
    130. Exit Sub
    131. End If
    132. Formularausgabe()
    133. SpeicherfunktionFreieOrdnerwahl()
    134. 'ExcelAnfragelisteVorgespannteBrücken()
    135. End Sub
    136. End Class


    Ich möchte eigentlich nur, dass ich alle aktivierten Checkboxen in den Groupbox entchecken. Ich bringe das einfach nicht hin.
    Microsoft.Office.Interop.Excel.GroupBox:
    Offensichtlich verwendest Du Controls, die ich nicht habe. Ersetze die Meinen durch die Deinen.

    toeller schrieb:

    Option Strict on kann ich leider nicht setzen, weil da erhalte ich jede Menge Fehler:
    Beseitige sie.
    If varRetVal = Nothing Then ==> If varRetVal Is Nothing Then
    Dim outl ==> Dim outl As DEIN_TYP_HALT
    usw.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Offensichtlich verwendest Du Controls, die ich nicht habe. Ersetze die Meinen durch die Deinen.
    Ich denke eher, dasses im Excel-Namespace ebenfalls eine Groupbox gibt, und daher ein Namenskonflikt vorliegt.
    Versuch:

    VB.NET-Quellcode

    1. Private Sub Reset(BasisGroupBox As System.Windows.Forms.GroupBox)
    2. '...
    Aber trotzdem Option Strict On!
    Erstmal zwischendurch vielen Dank für eure Hilfe.

    Ich habe jetzt mal das Strict auf On gestellt und bereits einige Fehler beseitigt.
    2 Fehler bekomme ich jedoch noch nicht weg:

    -Fehler 2 Fehler bei der Überladungsauflösung, da keine zugreifbare "<>" mit diesen Argumenten aufgerufen werden kann:
    "Public Shared Operator <>(a As String, b As String) As Boolean": "Option Strict On" lässt keine impliziten Konvertierungen von Microsoft.Office.Interop.Excel.Application in String zu. C:\Users\toeller\Documents\Visual Studio 2010\Projects\Anfrageformulare\Anfrageformulare\Formular Vorgespannte Granitbrücken.vb 248 12 Anfrageformulare

    Diesen Fehler 2 bekomme ich in der Zeile 97:

    VB.NET-Quellcode

    1. If outl <> "Microsoft Outlook" Then

    Außerdem bekomme ich eine Menge Fehler mit folgender Meldung:
    Option Strict ON lässt spätes binden nicht zu.
    Diese Fehler bekomme ich z.B.

    VB.NET-Quellcode

    1. If InStr(sender.Text, ",") > 0 And Asc(e.KeyChar) = 44 Then


    oder auch hier

    VB.NET-Quellcode

    1. Dim myMail = outl.CreateItem(0)
    Hi toeller.

    Ändere deine Methode Outlooköffnen wie folgt:

    VB.NET-Quellcode

    1. ' Importe
    2. Imports Outlook = Microsoft.Office.Interop.Outlook
    3. Imports System.Runtime.InteropServices
    4. Imports System.Reflection
    5. Private Sub Outlooköffnen()
    6. Dim outl As Outlook.Application = GetApplicationObject()
    7. Dim myMail As Outlook.MailItem = DirectCast(outl.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)
    8. myMail.Subject = "TESTMAIL"
    9. Dim myAttch As Outlook.Attachments = myMail.Attachments
    10. myAttch.add("C:\Test\vorlage.xltx", 1, 1)
    11. myMail.Save()
    12. myMail.Display()
    13. End Sub
    14. ' Funktion um die Instanz von Outlook zu bekommen.
    15. ' Quelle MSDN
    16. Function GetApplicationObject() As Outlook.Application
    17. Dim application As Outlook.Application
    18. ' Check whether there is an Outlook process running.
    19. If Process.GetProcessesByName("OUTLOOK").Count() > 0 Then
    20. ' If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
    21. application = DirectCast(Marshal.GetActiveObject("Outlook.Application"), Outlook.Application)
    22. Else
    23. ' If not, create a new instance of Outlook and log on to the default profile.
    24. application = New Outlook.Application()
    25. ' folgendes ist eventuell nicht nötig:
    26. ' Dim ns As Outlook.NameSpace = application.GetNamespace("MAPI")
    27. ' ns.Logon("", "", Missing.Value, Missing.Value)
    28. ' ns = Nothing
    29. End If
    30. ' Return the Outlook Application object.
    31. Return application
    32. End Function


    Link zur Quelle

    Gruss Mono
    Das ist meine Signatur und sie wird wunderbar sein!

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

    If outl <> "Microsoft Outlook" Then ==> Dim outl As DEIN_TYP_HALT
    If InStr(sender.Text, ",") > 0 And Asc(e.KeyChar) = 44 Then ==> sender ist Object, mach ein DirectCast in den erforderlichen Typ
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!