tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
315
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Alfons2 Alfons2 ist offline Mitglied Bronze
    Registriert seit
    May 2009
    Beiträge
    37
    Hi, ich habe bereits ein fertiges Programm hier, welches mit einer ListBox arbeitet, dort werden mehrere Dinge ausgegeben und um das übersichtlicher zu gestalten, wollte ich es farblich machen.

    Laut den Quellen hier:
    Code :
    1
    2
    3
    4
    
    http://www.codeproject.com/KB/combobox/colorlistbox.aspx
    http://www.mycsharp.de/wbb2/thread.php?threadid=6368
    http://www.mikrocontroller.net/topic/86128
    usw.
    ist das auch an sich nicht schwer. Nur weiß ich nicht wie ich es regeln soll, das meine Einträge eingefärbt "nachträglich" eingefärbt werden, ohne das ich nun alles umbauen muss. Hier mal mein Code, der die ListBox beschreibt:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    
    BackgroundWorker worker = sender as BackgroundWorker;
                // Liste der Hosts als Argument
                string[] hostNames = e.Argument as string[];
     
                if (hostNames != null && hostNames.Length != 0)
                {
                    foreach (string hostname in hostNames)
                    {
                        // Abbrechen...
                        if (worker.CancellationPending)
                        {
                            e.Cancel = true;
                            break;
                        }
     
                        if (!String.IsNullOrEmpty(hostname))
                        {
     
                            IP_Hostname iphost = new IP_Hostname();
                            string hostnamefromip = iphost.IP_zu_Hostname(hostname);
     
                            // Host abfragen...
                            string message = null;
                            try
                            {
                                using (Ping pingSender = new Ping())
                                {
                                    
     
                                    reply = pingSender.Send(hostname, PingTimeout);
                                    if (reply.Status == IPStatus.Success)
                                    {
                                        // Hier müsste nun der Code zum einfärben hin, in diesem Fall Grün
                                        // 
                                        message = String.Format("{0}({1}): {2} ms",
                                            hostname, hostnamefromip, reply.RoundtripTime);
                                    }
                                    else
                                        // Hier müsste nun der Code zum einfärben hin, in diesem Fall Rot
                                        // 
                                        message = String.Format("{0}({1}): {2}",
                                            hostname, hostnamefromip, reply.Status);
                                }
                            }
                              
                            catch (Exception ex)
                            {
                               // Hier müsste nun der Code zum einfärben hin, in diesem Fall auch Rot
                               // 
                                message = String.Format("{0}({1}): {2}",
                                    hostname, hostnamefromip, ex.Message);
                            }
                            
                            // Aktualisieren hier als Text
                            worker.ReportProgress(hostNames.Length / 100 + 1, message);
                            
                        }
                    }
               // }
                }
                if (repeat == true)
                {
                    System.Threading.Thread.Sleep(repeatvalue);
                }

    Als Hintergrund, das Programm pingt IP-Adressen an



    Mit freundlichen Grüßen

    Alfons
    Geändert von Alfons2 (02.10.10 um 21:41 Uhr)
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Wie stellst du dir das vor, eine Software zu patchen ohne den SourceCode zu ändern und dann auch neu zu kompilieren?
    Die Technologie ist noch nicht soweit fortgeschritten, dass sich Programme selbst ändern können.
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    Alfons2 Alfons2 ist offline Mitglied Bronze
    Registriert seit
    May 2009
    Beiträge
    37
    Ich meinte nicht, nicht ändern, sondern nicht ALLES umstricken.

    In der Konsolenprogrammierung, gibt es z.B. einen Befehl den man nur davor, bzw. dahinter schreiben muss, zur farblichen änderung.

    In dem einen Beispiel ist es dort mit einem Array gelöst. Ich will nun aber nicht erstmal alles in ein Array schreiben um es einzufärben, das muss doch noch anders gehen....
     

  4. #4
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    An welcher Stelle in deinem Code kommen die Einträge in die ListView?
    In die ItemsCollection der ListView kannst du beliebige Objekte hineinstecken. Die ListView ruft dann die ToString-Methode des Objekts auf und verwendet das Ergebnis als Text. Das heißt, du erstellst dir eine Klasse, die alle Informationen speichert, die du zum Darstellen eines ListView-Eintrags benötigst, also in deinem Fall zum Beispiel auch den Reply-Status. Mit diesen Objekten füllst du dann deine ItemsCollection der ListView.
    Dann abonnierst du das DrawItem-Event wie in den Links oben beschrieben und prüfst den Reply-Status deines Objekts und wählst entsprechend die Farbe aus.
     

  5. #5
    Alfons2 Alfons2 ist offline Mitglied Bronze
    Registriert seit
    May 2009
    Beiträge
    37
    Okay, es wird je nach dem ob Erfolgreich war oder nicht, die string Variable message definiert. Das wird dann an die ListBox weitergegeben.

    Muss ich da nun wirklich ein Listview daraus machen? Und wenn ja wie? Kannst du mir evtl. ein Code-Beispiel geben, dass das ganze veranschaulicht?
     

  6. #6
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Ne, sollte mit ListBox genauso funktionieren.
    Edit:
    Hier ein Code-Beispiel mit DrawMode auf OwnerDrawFixed (bedeutet, dass wir nur die Farben ändern möchten, nicht die Größe der Fläche, die einem Eintrag zustehen soll)
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    
    using System;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.listBox1.DrawItem += new DrawItemEventHandler(listBox1_DrawItem);
                // Items erstellen und in ListBox füllen
                for (int i = 0; i < 10; i++)
                {
                    this.listBox1.Items.Add(new MyListBoxItem("Status " + i.ToString(), i));
                }
     
            }
     
            void listBox1_DrawItem(object sender, DrawItemEventArgs e)
            {
                e.DrawBackground();
                e.DrawFocusRectangle();
                MyListBoxItem currentItem = (MyListBoxItem)((ListBox)sender).Items[e.Index];
                Brush Pinsel = (currentItem.Status < 5) ? System.Drawing.Brushes.Red : System.Drawing.Brushes.Green;
                e.Graphics.DrawString(currentItem.Text, e.Font, Pinsel, (RectangleF)e.Bounds);
            }
        }
     
        /// <summary>
        /// Klasse zum Speichern von Informationen die wichtig sind, um den Text in einer hübschen Farbe darzustellen.
        /// </summary>
        public class MyListBoxItem
        {
            int _Status;
            public int Status { get { return _Status; } }
     
            String _Text;
            public String Text { get { return _Text; } }
     
     
            public override string ToString()
            {
                return this.Text;
            }
     
            public MyListBoxItem(string text, int status)
            {
                _Text = text;
                _Status = status;
            }
        }
    }
    Geändert von Shakie (04.10.10 um 00:55 Uhr)
     

  7. #7
    Alfons2 Alfons2 ist offline Mitglied Bronze
    Registriert seit
    May 2009
    Beiträge
    37
    Cool danke!

    Ich schau mir das Beispiel nun mal genauer an und bastel es bei mir rein, ich lass es euch dann Wissen ob ich es geschafft habe oder nicht.

    EDIT:

    Alles klar es läuft, vielen dank nochmal! Nun eine Frage hätte ich da noch, ist es möglich, die Farbe aus einer string Variable auszulesen und sie dann mit Drawing.Brushes zu benutzen? die Variable dahinter zu hängen geht ja nicht, aber vielleicht gibt es noch eine andere Möglichkeit.
    Geändert von Alfons2 (04.10.10 um 18:38 Uhr)
     

Ähnliche Themen

  1. VC++ Programm nachträglich verändern!?
    Von kuhlmaehn im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 27.04.07, 21:12
  2. Zeichnung colorieren
    Von MiezeMatze im Forum Photoshop
    Antworten: 6
    Letzter Beitrag: 16.09.06, 12:02
  3. Fotos colorieren?
    Von jhazz im Forum Photoshop
    Antworten: 1
    Letzter Beitrag: 30.04.04, 15:31
  4. Handzeichnung colorieren
    Von schnarnd im Forum Photoshop
    Antworten: 9
    Letzter Beitrag: 25.02.04, 21:54
  5. colorieren
    Von Destitute im Forum Photoshop
    Antworten: 1
    Letzter Beitrag: 15.07.03, 05:52