Announcement

Collapse
No announcement yet.

Itemcheck

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Itemcheck

    Hallo Ralf,

    du hast recht ich habe zu kompliziert gedacht.
    Einfach in der Schleife hinzufügen klappt. Danke!

    Ich habe jetzt aber ein weiteres Problem:

    Ich möchte des immer nur eine Zeile "ge-checked" ist, also dass man immer nur eine Zeile anhaken kann.
    Das funktioniert so ganz gut:

    [highlight=vbnet]
    Private Sub ListView1_ItemChecked(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckedEventArgs) Handles ListView1.ItemChecked

    If ListView1.CheckedItems.Count > 1 Then

    MsgBox("nur eins markieren")

    End If

    End Sub[/highlight]

    Aber dann ist die 2. ... Zeile schon markiert, wie bekomme ich hin, dass ich dann sagen kann selecteditem.checked =false?

    Mit dem ListView muss ich Dir zustimmen, es läßt sich erbärmlich damit arbeiten, dass M$ da noch nichts anderes in der Hinterhand hat?
    Von Drittanbietern gibt es ja schon Lösungen.

    Gruß Alex

  • #2
    Ich vermute das der ItemCheck Event vor dem ändern der CheckBox auftritt und ItemChecked nach dem ändern.
    Insofern würde ich den ItemCheck Event benutzen um schon zu verhindern das etwas gechecked wird. Dort solltest du dann NewValue in den EventArgs passend setzen um zu verhindern das ein Item gesetzt wird.
    Auf keinen Fall solltest du in diesen Events die Checked Property ändern. Das würde ja nur wieder dafür sorgen das dieser Event wieder ausgelöst wird. Dann fängst du an irgendwas zu basteln damit du keine Endlosschleife/StackOverflow erhälst.

    Comment


    • #3
      Hallo Ralf,

      danke für die schnelle Antwort.
      Leider funktioniert ItemCheck auch nicht, einzige unterschied zu ItemChecked ist, dass es noch nicht bei ListView1.CheckedItems.Count mitgezählt wird.
      Aber der Haken wird trotzdem gesetzt, was ich eigentlich verhindern will.
      Beispiel:

      Im Event ItemChecked , wenn man da die zweite Zeile anklickt ist der Count bei 2
      Im Event ItemCheck, ist der Count (noch) 1 beim zweiten klicken.

      Ich könnte ja Endlosschleife/StackOverflow mit Boolean-Flags abfangen ebend ein Flag wird gesetzt wenn es per Code geändert wurde?

      Gruß Alex

      Comment


      • #4
        Im Event ItemCheck, ist der Count (noch) 1 beim zweiten klicken.
        Na klar du bist ja auch vor dem checken.

        Ich würde in ItemCheck prüfen ob CheckedItems.Count = 1 und ob NewValue in den EventArgs true ist (aka da will jemand eine checkbox setzen obwohl schon eine gesetzt wurde). In dem Fall würde ich NewValue wieder auf false setzen um das checken zu verhindern. (So zumindest die Theorie)

        Comment


        • #5
          Hallo Ralf,

          auch in der Praxis läßt es sich so umsetzen.
          Vielen Dank!

          [highlight=vbnet]
          Private Sub ListView1_ItemCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles ListView1.ItemCheck
          If ListView1.CheckedItems.Count > 0 Then
          If e.NewValue = CheckState.Checked Then
          e.NewValue = CheckState.Unchecked
          End If
          End If

          End Sub[/highlight]

          Funktioniert, wenn ein Haken gestzt ist, läßt sich nichts weiteres anhaken :-)

          Gruß Alex

          Comment

          Working...
          X