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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.