C# Properties.Resources durch Variable anpassen

  • C#
  • .NET (FX) 1.0–2.0

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von King2k7.

    C# Properties.Resources durch Variable anpassen

    Hallo,
    ich versuche gerade in C# einer Picturebox verschiedene Bilder zuzuweisen. Diese Bilder sind als Ressource in das Programm eingebunden. Wenn ich im Code nur ein Bild fest einbinde funktioniert es und sieht so aus:

    C#-Quellcode

    1. Image myBitmap = Properties.Resources.red; // Läd das Bild aus Ressource mit den Namen "red"


    Ich will aber das der Benutzter in den Einstellungen das Bild selbst festlegen kann, das in die Picturebox geladen wird. Versucht habe ich das ganze so:

    C#-Quellcode

    1. Image myBitmap = Properties.Resources. + Properties.Settings.Default.bild;


    In Properties.Settings.Default.Bild wird der Name des Bildes abgespeichert, wie die Bilder auch in den Ressourcen heißen. Damit versuche ich ich denn Befehl " Properties.Resources.BILDERNAME" entsprechen der Benutzterauswahl anzupassen.
    Leider geht es scheinbar nicht das ich mit einem "+" die Befehle verbinde.

    Die Fehlermeldung:
    Fehler CS0117 "Resources" enthält keine Definition für ""



    Mache ich etwas falsch in der Umsetzung oder ist der Ansatz komplett falsch und das ganze muss über andere Wege realisiert werden.
    @King2k7 Ressource-Items lassen sich nicvht addieren, das wäre so was wie:
    Control ctrl = System.Windows. + Forms.ButtonX;
    Wie sind denn die mehreren Bilder abgelegt?
    Nach welchen Kriterien sollen sie ausgewählt werden?
    Mach ein Enum über alle Bilder und weise in einem switch über das Enum das jeweilige Bild zu.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das man nicht einfach addieren kann, wusste ich. Ich habe versucht die 2 Befehle zu verketten (=https://docs.microsoft.com/de-de/dotnet/csharp/how-to/concatenate-multiple-strings).

    Die Bilder wurden in Visual Studio über die Projekt Eigenschaften unter Ressourcen importiert. Die Bilder werden je nach Benutzer auswahl geladen. D.h. der Benutzter kann in einem Dropdown Menü auwählen welches Bild er in die Picturebox laden will und mit einem Klick auf "ok" wird das Bild angezeigt.

    An die Variante mit einem Switch habe ich auch schon gedacht, damit wäre es so das die Switch Abschnitt mit jedem Bild länger wird, oder sehe ich das falsch?

    King2k7 schrieb:

    Ich habe versucht die 2 Befehle zu verketten
    Nö.
    Du hast versucht, Teile von NameSpaces, Klassennamen und Variablennamen zu verketten.
    Beschrfeib zunächst, was am Ende herauskommen und passieren soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich möchte das das Programm(Beim Programmstart) genau das Bild aus den Ressourcen in die Picturebox läd was im Vorfeld vom Bentutzer ausgewählt worden ist und unter Properties.Settings.Default.bild gespeicht werde.
    Die möglichkeiten der Auswahl sind "red", "blue", "green" "yellow". Eins dieser 4 Worte ist gepeichert unter Properties.Settings.Default.bild.

    Genau die selben Namen haben auch die Bilder die ich als Ressoruce ins Projekt importiert habe.

    Mein Code oben zeigt den Versuch das richtige Bild, das was der Benutzer ausgewählt hat in eine Picturebox zu lade. Dabei sollte die "Zeile Properties.Resources." nach dem Punkt erweitert werden mit dem Wort aus "Properties.Settings.Default.bild" und dadruch das richtige Bild anzeigen.

    Bsp, was je nach Auswahl herauskommen sollte:
    Properties.Resources.red
    Properties.Resources.blue
    usw.

    Ich hoffe es ist verständlich was ich da versuche.
    @King2k7 OK. So was:
    Mach Dir ein Enum { red, blue, green yellow }, genau, wie die Bilder heißen.
    Pseudocode:

    Quellcode

    1. Dim MY_INDEX As MY_ENUM = MY_ENUM.yellow ' dann abspeichern
    2. Dim AlleBilder() As Image = { Ressource.red, Ressource.blue, Ressource.green Ressource.yellow }
    3. Me.PictureBox1.Image = AlleBilder(CInt(MY_INDEX))
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke jetzt klappts wie gewünscht. Speichern nicht mehr die Namen der Bilder, sondern den INDEX zu dem entsprechendem Bild. Dadruch kann ich mit dem unterem Code das ganze erreichen.

    Habe es mit diesem Code erreicht:

    C#-Quellcode

    1. Image[] AlleBilder = new[] {
    2. Properties.Resources.red,
    3. Properties.Resources.red_2,
    4. Properties.Resources.blue,
    5. Properties.Resources.blue_2,
    6. Properties.Resources.green,
    7. Properties.Resources.green_2,
    8. Properties.Resources.yel,
    9. Properties.Resources.yel_2 };
    10. Image myBitmap = AlleBilder[System.Convert.ToInt32(Properties.Settings.Default.bild)];