Laden...

ComboBox/Panel: Farbauswahl per Methodenaufruf

Erstellt von Crone vor 13 Jahren Letzter Beitrag vor 13 Jahren 6.437 Views
C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 13 Jahren
ComboBox/Panel: Farbauswahl per Methodenaufruf

Hallo,

Ich habe mir eine ComboBox genommen die mehrere farben enthält. Je nach auswahl soll das Panel gefärbt werden, da ich dies jedoch öfters brauche und ich den Code meiner Form nicht unnötig lang machen will wollte ich die ganze geschichte per Method bzw. Klasse machen.


        public string farbwahl(string box)
        {
            
            switch (farbe)
            {
                case "Rot":
                    
                    break;  
               case "Gelb":

                    break;
                case "Grün":

                    break;
                case "Blau":

                    break;
                case "Orange":

                    break;
                case "Pink":

                    break;
                case "Schwarz":

                    break;
                case "Random":

                    break;
            }

Nun das Problem wie kann ich jetzt bestimmen wie sich mein Panel färben soll bzw. wie muss ich das übergeben.

So ändere ich ja die farbe


panel1.BackColor=  System.Drawing.Color.Red;  

>>>


panel1.BackColor=  System.Drawing.Color.nochUnbekannt; 

Die noch unbekannte Farbe soll durch einen Methoden aufruf an den Code sozusagen ran gehangen werden da ich ja irgend wie die Farbe ändern muss.

Nun würde ich die ganze sache ja z.b. als String wieder geben und dann in ein Code umwandeln ,wenn sowas geht?!?!?, aber hab einfach nichts gefunden.

Wie kann ich also von einer anderen Methode bzw. Klasse die Farbe des Panels ändern?

Ich weiß sehr kopliziert ausgedrückt wusste einfach nicht wie ich es erklären soll 😃

MFG Marcel

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

C
2.121 Beiträge seit 2010
vor 13 Jahren

Häng ein Objekt in die Combobox, das in ToString den anzuzeigenden Text zurückgibt und das die Farbe als Typ "Color" enthält. Dann nimmst du direkt das Farbobjekt und setzt es im Panel.
Somit muss du nur einmalig, nämlich beim Füllen der Combobox, den Zusammenhand zwischen dem Text und dem Color-Objekt herstellen.

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 13 Jahren

Das hört sich gut an aber wie genau funktioniert das?

Also zuzeit hab ich eine Combobox daneben ein Panel das noch unsichtbar ist bis ein eintrag ausgewählt wird. Nun wird es Sichtbar und soll die farbe bekommen.

Aber wie hänge ich ein Objekt an der Combobox? bzw. immoment verstehe ich das mit den Objekt noch nicht so ganz.

könntest du villeicht ein kleines Code beispiel posten mit ner kleinen erklärung wäre super nett.

MFG Crone

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

C
2.121 Beiträge seit 2010
vor 13 Jahren

Eine Combobox zeigt zu einem Objekt das man in sie hängt den String an, der mit ToString zurückgegeben wird.
Mach dir sowas

ComboKlasse: class
{
  public string Farbenname { get; set; }
  public Color Farbe { get; set; }

  public override ToString()
  {
    return Farbenname;
  }
}

und häng diese Objekte in die Combobox. Dann zeigt die den Farbnamen an.
Mit (ComboKlasse)combobox.SelectedItem liest du das ausgewählte Item aus und kriegst dann die Farbe.

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 13 Jahren

Danke erstmal für die antwort, jedoch komme ich einfach noch immer nicht weiter 😃

Ich verstehe den Code leider nicht ganz mit get und set, zudem kommt ein error "Die Methode muss ein Rückgabetype besitzen"

Dann ist das das problem mit den Objekt, wie hänge ich den ein Objekt an die Combobox einträge an ich hab gegooglet aber es kam nur jedemenge anderes zeug.

Und wie muss ich nun die Methoden ausführen.


   private void comboBox15_SelectedIndexChanged(object sender, EventArgs e)
        {
         panel1.Backcolor=Klassenname.Farbenname( //comboBox15.Text? );
         panel1.Backcolor= Klassenname.Farbe( //comboBox15.Text? );
         panel1.Backcolor=Klassenname.ToString() //?
        }

Also ich klicke auf einen eintrag z.b. Rot dann wird das Event oben ausgeführt. Nun soll das Panel die farbe ändern.

Nun wie muss ich das nun in der Form bzw. in den oberen Event aufrufen bzw. welche Methode ich nun wo aufrufen muss. Und wie hänge ich jetzt genau ein obejekt an die Combobox einträge?



// Klasse wird aufgerufen wenn eintrag in Combobox geändert wurde
 class Klassenname
    {

        public string Farbenname { get; set; }

        public Color Farbe { get; set; }

        public override ToString()
        {
            return Farbenname;
        }
    }



//FORM
   private void comboBox15_SelectedIndexChanged(object sender, EventArgs e)
        {
         panel1.Backcolor=Klassenname.Farbenname( //comboBox15.Text? );
         panel1.Backcolor= Klassenname.Farbe( //comboBox15.Text? );
         panel1.Backcolor=Klassenname.ToString() 
        }

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

2.298 Beiträge seit 2010
vor 13 Jahren

Wenn du obiges Beispiel verfolgst dann eher so:


private void comboBox15_SelectedIndexChanged(object sender, EventArgs e)
{
    if(comboBox15.SelectedItem != null)
    {
        MyColorClass color = comboBox15.SelectedItem as MyColorClass;
        panel1.BackColor = color.Color;
    }        
}


Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

3.511 Beiträge seit 2005
vor 13 Jahren

Wenn du mit as abfragts, brauchst du vorher nicht auf != null prüfen.


MyColorClass color = comboBox15.SelectedItem as MyColorClass;
if (color != null)
  panel1.BackColor = color.Color;

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo zusammen,

man muss SelectedItem in der Tat nicht auf null abfragen, weil man es ja beim Füllen der ComboBox selbst in der Hand hat, dass der Fall nie eintreten kann.

Hallo Crone,

Die Methode muss ein Rückgabetype besitzen

siehe [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen) und beachte bitte [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.

herbivore

2.298 Beiträge seit 2010
vor 13 Jahren

Nun wie muss ich das nun in der Form bzw. in den oberen Event aufrufen bzw. welche Methode ich nun wo aufrufen muss. Und wie hänge ich jetzt genau ein obejekt an die Combobox einträge?

Da ich es übersehen habe, folgende Vorgehensweise würde ich wählen:


public class MyColorClass 
{
    private String _name;
    public String Name
    {
        get { return _name; }
        set { _name = value; }
    }

    private Color _color;
    public Color Color
    {
       get { return _color; }
       set { _color = value; }
    }

    public MyColorClass()
    {
    }

    public MyColorClass(String name, Color color)
    {
        _name = name;
        _color = color;
    }
}


private void SetColors()
{
     List<MyColorClass> colors = new List<MyColorClass>();
     colors.Add(new MyColorClass("Red", Color.Red));
     colors.Add(new MyColorClass("Blue", Color.Blue));
     colors.Add(new MyColorClass("Yellow", Color.Yellow));

     this.comboBox15.DataSource = colors;
     this.comboBox15.DisplayMember = "Name";
}

Ich würde die Farben vermutlich in eine Konfigurationsdatei packen einfach laden. - Aber das wäre the easiest way.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

I
1.739 Beiträge seit 2005
vor 13 Jahren

Also - Color(system.drawing) enthält ja einige Enumerationen. Wie Enum2Text und umgekehrt funktioniert ergibt die Forensuche.
IList from a List...