29. august 2005 - 15:13Der er
24 kommentarer og 1 løsning
ListBox control
Heysa.. Jeg har to xml doc. som jeg indlæser. Jeg har to XMlNodeList (nodeList1 og nodeList2). Jeg lister dem i to listbox´es. Hvis node´ene IKKE er ens, vil jeg have dem skrevet ud i fx. rød farve, men hvordan gør jeg det???
for(int i=0; i<nodeList1.Count; i++) { if(nodeList1[i].Name == nodeList2[i].Name) { listBox1.Items.Add(nodeList1[i].Name); listBox2.Items.Add(nodeList2[i].Name); } else { listBox1.Items.Add(nodeList1[i].Name); listBox2.Items.Add(nodeList2[i].Name); //men her skal skriften være rød } }
Din egne control skal extende ListBox, og dens DrawMode sættes til OwnerDraw.
Jeg var faktisk lidt hurtig, det er DrawItem der skal overrides:
private void listBox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { // Set the DrawMode property to draw fixed sized items. listBox1.DrawMode = DrawMode.OwnerDrawFixed; // Draw the background of the ListBox control for each item. e.DrawBackground(); // Create a new Brush and initialize to a Black colored brush by default. Brush myBrush = Brushes.Black;
// Determine the color of the brush to draw each item based on the index of the item to draw. switch (e.Index) { case 0: myBrush = Brushes.Red; break; case 1: myBrush = Brushes.Orange; break; case 2: myBrush = Brushes.Purple; break; }
// Draw the current item text based on the current Font and the custom brush settings. e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush,e.Bounds,StringFormat.GenericDefault); // If the ListBox has focus, draw a focus rectangle around the selected item. e.DrawFocusRectangle(); }
den skal du ikke kalde.. du skal bare programmere noget logik i din DrawItem metode. Du får fat i indexet i din ListBox med e.Index. Dette index kan du så bruge til at tjekke din XML filer med. Hvis XMl filerne er ens på et givent index, tegn med sort, ellers tegn med rød.
Jeg vil dog anbefale at du læser din XML ind i dit btn_click, da det vil tage alt for lang tid at læse xml ind for hver gang drawitem metoden skal kaldes.
Jeg er ikke helt med på hvad du mener med "Du får fat i indexet i din ListBox med e.Index. Dette index kan du så bruge til at tjekke din XML filer med. Hvis XMl filerne er ens på et givent index"
Når man trykker på et af dem, vises indholdet i en datagrid ved siden af. Jeg har lidt på fornemmelsen at det ikke kan lade sig gøre, hvis man tegner nodes´ene, men jeg er ikke sikker..
smsng>> jeg tror du roder lidt rundt i at listBox1_DrawItem er en metode du skal kalde... dette er IKKE tilfældet.
på samme måde som du at du heller ikke selv kalder btn_Click, men at den automatisk bliver udført når du klikker på din knap, på samme måde skal du heller ikke selv kalde listBox1_DrawItem. Den bliver automatisk kaldet af din listbox, hver gang der er et item der skal tegnes.
hvad skal der ske i det tilfælde hvor der ikke er lige mange elementer?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.