Autor Beitrag
MeineKekse
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 12.01.12 22:22 
Also mein Problem ist das folgende:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
enum ColorsToCheck { Red, Green, Blue, Orange, Brown, Yellow, };

private void SaveValues(Control ctrl)
        {
            int[] hans = new int[4];
            int i2 = 0;
            foreach (string i in Enum.GetNames(typeof(Colors)))
            {
                if (ctrl.BackColor == Color.FromName(i))
                    [color=red]hans[i2] = ColorsToCheck.FromName(i); // Hier funktioniert das so nicht
                    i2++;
            }
            i2 = 0;
        }


Das Problem ist, dass die gekennzeichnete Zeile so nicht funktioniert. Ich würder mich freuen ,wenn jemand mir helfen könnte.
auch

ausblenden C#-Quelltext
1:
ColorsToCheck.i // funktioniert ebenfalls nicht					
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 12.01.12 23:35 
Sieht sehr unglücklich aus. Wenn es unbedingt ein Enum sein soll solltest du erklären warum.

Von der Aufgabe ausgehend die ich aus deinem gezeigten Code rauslese würde ich Vorschlagen einfach ein Array von Color Objekten zu benutzen.
Das lässt sich in diesem Context deutlich einfacher behandeln. Wenn ich deinen Code missverstanden habe solltest du auch erklären was der soll. Ein Control hat genau eine BackColor. Was soll also das hans Array? Im Moment erscheint hans und i2 vollkommen überflüssig. Wo kommt das Colors Enum her? Hast du auch eine Colors Enum erstellt mit allen Farben? Der von dir markierte Code wird knallen weil FromName ein Color Object liefert dein hans Array besteht aber aus int. int ungleich Color. Ist als nicht typkompatibel. Das sollte dir der Compiler auch genauso so als Fehler gemeldet haben.


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public static List<Color> ColorsToCheck = { Color.Red, Color.Green, Color.Blue, Color.Orange, Color.Brown, Color.Yellow };

private void SaveValues(Control ctrl)
{
    int[] hans = new int[4];

    int index = Array.FindIndex(ColorsToCheck, x => x == ctrl.BackColor);
    if (index != -1)
    {
       hans[0] = index; // wofür hans auch immer gut ist??? 
    }
}
MeineKekse Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 13.01.12 21:05 
Hi,

danke für die Hilfe. Mein Ziel ist es, die aktuelle HintergrundFarbe einer PictureBox abzufragen und dann je nach Farbe 1-6 im Array Hans[4] (-da 4 pictureBoxen )zu speichern.(1-entspricht z.B. rot 2 z.B. Grün usw).
In deinem Beispiel erhalte ich folgede Fehler:
Zitat:
Fehler 1 Arrayinitialisiererausdrücke können nur zum Zuordnen von Arraytypen verwendet werden. Verwenden Sie stattdessen einen new-Ausdruck.
Fehler 2 Die Typargumente der System.Array.FindIndex<T>(T[], System.Predicate<T>)-Methode können nicht per Rückschluss aus der Syntax abgeleitet werden. Geben Sie die Typargumente explizit an.


Der Zweite bezieht sich auf die Liste der erste auf den Ausdruck Array.FindIndex(ColorsToCheck, x => x == ctrl.BackColor).

Moderiert von user profile iconTh69: Quote und C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 13.01.12 21:42 
Hallo,

da Array.FindIndex nur auf Arrays arbeitet, müßte es entweder
ausblenden C#-Quelltext
1:
int index = Array.FindIndex(ColorsToCheck.ToArray(), x => x == ctrl.BackColor);					

heißen oder aber gleich mit List<T> arbeiten
ausblenden C#-Quelltext
1:
int index = ColorsToCheck.FindIndex(x => x == ctrl.BackColor);					


P.S. Ralf, jetzt sind wir bzgl. Binden einer List<T> an eine ComboBox Quitt ;-)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 13.01.12 22:48 
Touché ;)

Die 3.te Möglichkeit die ich gemeint haben könnte ist ColorsToCheck einfach als Array zu definieren nicht als List.

ausblenden C#-Quelltext
1:
public static Color[] ColorsToCheck = { Color.Red, Color.Green, Color.Blue, Color.Orange, Color.Brown, Color.Yellow };					


ColorsToCheck scheint sich ja während der Laufzeit eh nicht zu ändern.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 14.01.12 10:36 
Hallo Ralf,

stimmt, denn deine List-Variante würde so exakt ja gar nicht kompilieren (es fehlt nämlich noch new List<Color> vor der Initialisierungsliste.
Und dann wäre die Array-Variante eh sinnvoller.