listView C#: Header Hintergrundfarbe ändern

Gast #6820886
Lesenswert?

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.
#6820971
Lesenswert?

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
Gast #6821819
Lesenswert?

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.
Gast #6822067
Lesenswert?

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?
Gast #6824353
Lesenswert?

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
        }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren