Hallo, für eine C# Anwendung wird ein listView Toolbox Element verwendet. Nun möchte ich zum Abschluss noch, dass der Hintergrund des Headers eine Farbe erhält. Leider konnte ich im Netz dazu nichts finden wo auch funktioniert hat.
Erster Treffer bei Google-Suche nach
1 | c# winforms listview header background |
https://stackoverflow.com/questions/1814692/change-the-background-color-of-winform-listview-headers merciless
Vielen Dank. Das mit dem Ereignis "DrawColumnHeader" tut nicht. Es wird im debug Mode das Ereignis nicht ausgeführt.
Jetzt ist es so dass die Hintergrundfarbe zwar ständig geändert wird aber solbald ich Daten in die items schreibe und im listView darstellen möchte, werden die Daten nicht angezeigt. Es scheint so, also ob die Callback Funktion permantent ausgeführt wird und das ganze listView neu zeichnet.
Probier mal, das Update zu unterdrücken, wenn viele Items eingefügt werden:
1 | private void SetWindowRedraw(Control ctrl, bool onOff) |
2 | { |
3 | SendMessage(ctrl.Handle, WM_SETREDRAW, onOff, 0); |
4 | if (onOff) |
5 | { |
6 | ctrl.Update(); |
7 | } |
8 | } |
9 | |
10 | ... |
11 | |
12 | SetWindowRedraw(myListView, false); |
13 | myListView.Items.Clear(); |
14 | // viele Items einfügen |
15 | ... |
16 | SetWindowRedraw(myListView, true); |
merciless
:
Bearbeitet durch User
Entwickler schrieb: > Moin Dirk, das funktioniert nicht. Schade. Tja, C# hat eben so seine Ecken und Kanten. Da gibt es noch ganz andere Sachen wo man tricksen muß, damit er am Ende das macht was er machen soll. Bin froh das ich mit dem Kram nix mehr machen muß.
Ja das stelle ich auch immer wieder fest. Aber nochmal zu meinem Problem. Wie könnte ich dies umgehen, dass das trotzdem so funktioniert wie ich möchte?
Entwickler schrieb: > Aber nochmal zu meinem Problem. Wie könnte ich dies umgehen, dass das > trotzdem so funktioniert wie ich möchte? Muß es unbedingt ein ListView sein? Ginge evtl. auch ein Grid? Wenn die Linien stören dann diese halt ausblenden. Dann gab's es doch so einen Header auch noch als selbständiges Object, da weiß ich aber nicht mehr wie das hieß - C# ist halt bei mir schon zu lang her. Aber auch bei den Listen gab es unterschiedliche Objecte, die sich auch unterschiedlich verhalten haben. Probier mal eine Listbox.
Entwickler schrieb: > Moin Dirk, das funktioniert nicht. Schade. Ähm, was genau funktioniert nicht? Ich habe das hier in mehreren Projekten so im Einsatz und da geht es? merciless
Auf dem listView erscheint bei mir nichts mehr.
1 | private void SetWindowRedraw(Control ctrl, bool onOff) |
2 | |
3 | {
|
4 | |
5 | SendMessage(ctrl.Handle, WM_SETREDRAW, onOff, 0); |
6 | |
7 | if (onOff) |
8 | |
9 | {
|
10 | |
11 | ctrl.Update(); |
12 | |
13 | }
|
14 | |
15 | }
|
Kannst du mir eventuell deine komplette Funktion posten mit den dazugehörigen Variablen?
Guten Morgen, wenn ich die Funktion SetWindowRedraw ausführe erscheint dann nichts mehr auf dem lisView Toolboxelement.
Hier mein Beispiel das nicht funktioniert:
1 | public Program() |
2 | {
|
3 | InitializeComponent(); |
4 | |
5 | ListViewItem[] items = new ListViewItem[13]; |
6 | |
7 | items [0] = new ListViewItem("Number"); |
8 | items [0].SubItems.Add("Test"); |
9 | |
10 | SetWindowRedraw(listViewDefaultTelegram, 1); |
11 | listViewTest.Items.Add(items [0]); |
12 | SetWindowRedraw(listViewDefaultTelegram, 0); |
13 | }
|
14 | |
15 | private void OnDrawColumnHeader_listViewTest(object sender, DrawListViewColumnHeaderEventArgs e) |
16 | {
|
17 | // Fill header background with solid yello color.
|
18 | e.Graphics.FillRectangle(Brushes.AliceBlue, e.Bounds); |
19 | // Let ListView draw everything else.
|
20 | e.DrawText(); |
21 | }
|
22 | |
23 | private void SetWindowRedraw(Control ctrl, int onOff) |
24 | {
|
25 | int WM_SETREDRAW = 11; |
26 | SendMessage(ctrl.Handle, WM_SETREDRAW, onOff, 0); |
27 | if (onOff == 1) |
28 | {
|
29 | ctrl.Update(); |
30 | }
|
31 | }
|
Probiere mal
1 | SetWindowRedraw(listViewDefaultTelegram, 0); |
2 | listViewTest.Items.Add(items [0]); |
3 | SetWindowRedraw(listViewDefaultTelegram, 1); |
merciless
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.