Benutzer mit den meisten Antworten
Buttons auf ListView verschwinden

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
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-DraUnd 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.htmlPhillip 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- Als Antwort markiert Robert BreitenhoferModerator Montag, 27. Februar 2012 12:27
-
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- Als Antwort markiert Robert BreitenhoferModerator Montag, 27. Februar 2012 12:27
Alle Antworten
-
Kleines Update:
Wenn ich die Buttons im WndProc neuzeichnen lasse, funktioniert es, aber andere Sachen werden nichtmehr brauchbar dargestellt (Kein Wunder, ich lass die Buttons ja millionen mal unnötig neu zeichnen)
Also bräuchte ich jetzt eig. von euch nur die richtige WndProc Message, wenn man den ColumnHeader hovert.
Irgendeine Idee?
-
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-DraUnd 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.htmlPhillip 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- Als Antwort markiert Robert BreitenhoferModerator Montag, 27. Februar 2012 12:27
-
Ich habe das Problem identifiziert, lösen kann ich es aber trotzdem nicht.
Da ich auf den ColumnHeader drauf zeichnen will, hat das eig. mit der ListView garnichts mehr zu tun, da der ja nen eigenes Objekt ist.
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.
-
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- Als Antwort markiert Robert BreitenhoferModerator Montag, 27. Februar 2012 12:27
-
Hallo [Hidden],
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.