none
Buttons auf ListView verschwinden RRS feed

  • Frage

  • Hi Leute,

    ich hab nen kleines Problem.

    Ich bin grade dabei, mir ne etwas erweiterte ListView zu programmieren, die unter anderem 2 Buttons (+ und -) enthält.

    Grundsätzlich klappt das auch, nur verschwinden die Buttons, und tauchen erst wieder auf, wenn sie gehovert werden.

    Egal was ich mache, mit Code bekomme ich die nichtmehr sichtbar, die einzige Möglichkeit ist, mit der Maus drüber zu fahren.

    Sobald man mit der Maus dann wieder irgendwo in der ListView auftaucht verschwinden die Buttons aber wieder.

    BringToFront hat keinen effekt, Visible ist true und die Location ist auch korrekt, sie werden also bis zum hovern einfach unsichtbar.

    Irgendeiner ne Idee, was ich falsch mache?

    MfG

    Hidden

    Dienstag, 7. Februar 2012 19:35

Antworten

  • Hallo Hidden,

    Du erzählt hier viel zu wenig über die Art und Weise, wie Du das Zeichnen bewerkstelligst, also kann ich darauf gar nicht eingehen. Was man aber wissen muss, ist dass ListView (und zwar das gewrappte, native Objekt) eine gute, native Unterstützung für benutzerdefiniertes Zeichnen anbietet.

    Michael Dunn - Neat Stuff to Do in List Controls Using Custom Draw:
    http://www.codeproject.com/Articles/79/Neat-Stuff-to-Do-in-List-Controls-Using-Custom-Dra

    Und es gibt Projekte, wie ObjectListView, die diese Techniken erfolgreich in C# einsetzen, um das ListView-Control mit Funktionalität zu erweitern.

    Phillip Piper- ObjectListView
    http://objectlistview.sourceforge.net/cs/index.html

    Phillip Piper- A Much Easier to Use ListView
    http://www.codeproject.com/Articles/16009/A-Much-Easier-to-Use-ListView


    Schau dich mal um (Code verfügbar).

    Gruß
    Marcel

    Donnerstag, 9. Februar 2012 10:14
    Moderator
  • Hallo [Hidden],

    > Nun wollte ich versuchen, den ColumnHeader zu verändern, aber der hat absolut keine brauchbaren Methoden, die ich überschreiben könnte, und da endet es dann mit meinen Fähigkeiten.

    Was Du benötigst, ist das native HeaderControl der ListView. Du kannst der ListView eine LVM_GETHEADER Windows-Nachricht schicken, um das Handle des HeaderControls zu erhalten. Dieses Handle packst Du dann in ein NativeControl ein [rufst NativeControl.AssignHandle(headerControlHandle) auf und überschreibst zusätzlich NativeControl.WndProc, um bei einer WM_PAINT-Nachricht direkt in das HeaderControl zu zeichnen).

    Georgi Atanasov hat einen guten einführenden Artikel dazu auf codeproject.com. Sieh dir dort bitte die Klasse CustomHeader.MyListView.HeaderControl an.

    Gruß
    Marcel

    Montag, 13. Februar 2012 13:15
    Moderator

Alle Antworten