Announcement

Collapse
No announcement yet.

Flackerndes ListView

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

  • Flackerndes ListView

    Hallo Zusammen,

    ich füge in ein ListView in sehr kurzen Intervallen (ca. 200ms) neue Items hinzu.
    Dabei enthält das ListView nur insgesamt 25Items. (Ich lösche immer das 0. Item)

    Leider flackert das Listview fürchterlich :-(

    Kann man das ListView irgenwie beruhigen?

    Das Hinzufügen erfolgt über ListView.Items.Add(ListViewItem). Das Befüllen erfolgt dabei nicht in einer Schleife. Sondern immer durch den Add-Aufruf


    Micha
    Zuletzt editiert von michaonline; 29.04.2009, 20:07.

  • #2
    Lösung.

    Hallo

    hab hier: http://stackoverflow.com/questions/4...view-on-update

    die Lösung gefunden. Der Code bei 3. hat funktioniert :-)
    Schade, dass das ListView das nicht schon von Hause aus macht.

    Micha

    Comment


    • #3
      doch keine Lösung

      Hallo zusammen,

      ich war wohl etwas zu voreilig. Die Lösung funktioniert nur bei Anwendungen fürs .NET-Framework 3.5 (

      Hat jemand noch ne idee?

      Micha

      Comment


      • #4
        Der Code bei 3. hat funktioniert :-)
        Der Post mit Suspend/ResumeLayout? Das sollte wirklich nicht helfen.
        Richtig sollte sein DoubleBuffered zu setzen. Aber nicht ganz so wie im ersten Post über SetStyle sondern über die DoubleBuffered Property die nebenbei noch ein paar andere Kleinigkeiten erledigt die wenn man die Styles über SetStyle direkt setzt außen vor läßt.

        Code:
        Die Lösung funktioniert nur bei Anwendungen fürs .NET-Framework 3.5
        Welcher Code nochmal genau. Ich bezweifle das es Abhängigkeiten auf das 3.5er Framework gibt.

        Comment


        • #5
          Hallo Ralf,

          die DoubleBuffered EIgenschaft müsste ich in einem abgeleiteten ListView setzten, oder?

          Wie kann man das aktivieren?


          Den Code habe ich im 2er-Framework und 3.xer Framework getestet. Nur beim 3.xer hats nicht mehr geflackert, komisch.

          Diesen Code habe ich in nem abgeleiteten ListVIew probiert:

          class ListViewNF : System.Windows.Forms.ListView
          {
          public ListViewNF()
          {
          //Activate double buffering
          this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);

          //Enable the OnNotifyMessage event so we get a chance to filter out
          // Windows messages before they get to the form's WndProc
          this.SetStyle(ControlStyles.EnableNotifyMessage, true);
          }

          protected override void OnNotifyMessage(Message m)
          {
          //Filter out the WM_ERASEBKGND message
          if(m.Msg != 0x14)
          {
          base.OnNotifyMessage(m);
          }
          }
          }
          Micha

          Comment


          • #6
            die DoubleBuffered EIgenschaft müsste ich in einem abgeleiteten ListView setzten, oder?
            Genau. Die ist ja protected. Die müßtest du im Constructor aufrufen anstatt SetStyle(...).

            Den Code habe ich im 2er-Framework und 3.xer Framework getestet. Nur beim 3.xer hats nicht mehr geflackert, komisch.
            OK. Dann mag es da doch Unterschiede geben. Mit dem 3.5er Framework wurden ein paar kleinere Fixes auch am 2.0er Kern vorgenommen. Wenn du zwingend eine reine 2.0er Lösung brauchst solltest du mal das SP2 von NET 2.0 ausprobieren. Wenn Microsoft in 3.5 etwas gefixt hat solltest es auch in dem Service Pack stecken.

            Comment

            Working...
            X