Problem mit Control

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Dendem.

    Problem mit Control

    Hallo, ich bin gerade auf ein Problem gestoßen.

    VB.NET-Quellcode

    1. Dim e As Control
    2. For Each control In GroupBox2.Controls
    3. If e.Name = "fx" & abl & "d" Then
    4. If e.Checked = False Then Chart1.Series(abl).Points.Clear()
    5. If e.Checked = True Then
    6. End If


    dann funktioniert die "checked" Eigenschaft nicht, die ich benötige.


    VB.NET-Quellcode

    1. Dim e As Checkbox
    2. For Each control In GroupBox2.Controls
    3. If e.Name = "fx" & abl & "d" Then
    4. If e.Checked = False Then Chart1.Series(abl).Points.Clear()
    5. If e.Checked = True Then
    6. End If


    Und in dem Fall wird die Variable benutzt, bevor ihr ein Wert zugeordnet wird,
    wo liegt das Problem?

    MfG
    Das Problem liegt daran, dass Du die Variable "control" nutzen sollst. Die Variable "e" ist ein beiden Beispielen sinnlos.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    ok hab ich geändert, nur warum ist die Variable e Sinnlos?
    jetzt habe ich das Problem, dass ich "control" als checkbox deklariert habe.

    VB.NET-Quellcode

    1. Dim control As CheckBox
    2. For Each control In GroupBox2.Controls
    3. If control.Checked = False Then Chart1.Series(abl).Points.Clear()
    4. If control.Checked = True Then
    5. end if


    Der Fehler:

    Quellcode

    1. Das Objekt des Typs "System.Windows.Forms.Button" kann nicht in Typ "System.Windows.Forms.CheckBox" umgewandelt werden.

    Müsste die Schliefe eigtl nicht NUR die Checkboxen durchgehen?
    wenn ich control als control anstatt als checkbox definiere kann ich eine TypeOf abfrage einbauen
    aber dann nicht auf die Eigenschaft "checked" zugreifen.
    Hier schau, ein kleines Beispiel:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    2. For Each c As Control In Me.Controls
    3. If TypeOf (c) Is CheckBox Then
    4. DirectCast(c, CheckBox).Checked = False
    5. End If
    6. Next
    7. End Sub
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Falls Du in der Schleife öfter auf ein und dieselbe CheckBox zugreifen musst, dann leg Dir eine temp. Variable an und weise ihr die entsprechende CheckBox zu. Ist bequemer....

    VB.NET-Quellcode

    1. For Each c As Control In Me.Controls
    2. If TypeOf (c) Is CheckBox Then
    3. Dim tmp As CheckBox = DirectCast(c, CheckBox)
    4. tmp.Checked = True
    5. End If
    6. Next
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Gibt sogar ne Funktion dafür: OfType

    VB.NET-Quellcode

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


    Das ist übrigens auch aus folgenden 2 Gründen Mist:

    VB.NET-Quellcode

    1. If e.Checked = True Then
    2. End If

    1. ist .Checked mit True zu vergleichen ist Müll. .Checked ist schon Boolean! Ergo einfach nur if .Checked.
    2. Da ist ja gar keine Anweisung drin!

    Statt if bool = false kann man einfach schreiben if Not bool.