Laden...

Zugriff auf Resources.resx ?

Letzter Beitrag vor 15 Tagen 8 Posts 373 Views
Zugriff auf Resources.resx ?

Wenn ich in C# ein neues Windows Forms-App-Projekt erstelle, wird den Projekteigenschaften automatisch die Datei Resources.resx hinzugefügt.

Ich habe dieser Datei ein Bild hinzugefügt.

Aber wie greife ich auf diese Ressource zu? Sie scheint nicht in der veröffentlichten Lösung enthalten zu sein.

Was muss ich tun, um die Ressourcen in meiner Anwendung zu haben, und wie kann ich auf das Bild in dieser Datei zugreifen?

_______________________________________________

When I create a new Windows Forms App project in c# a file called Resources.resx is added automatically to the project properties.

I added an image to this file.

But how do I access this resource ? It doesn't seem to be included in the publish solution.

What do I need to do to have the resources in my application and how can I access the image in this file ?

Hallo NadirHamburg,

schau dir [Artikel] Resourcen in .NET Assemblies an, auch wenn der Artikel bereits etwas älter ist, stimmt der Inhalt noch immer.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Guten Morgen und herzlichen Dank für das Feedback.

Der Artikel ist zwar sehr interessant, konnte aber meine Frage nicht beantworten.

Ich habe jetzt aber die Lösung gefunden, wie ich die Resource ansprechen kann:

//--- Get the assembly and the resource base name
System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
string resourceName = asm.GetName().Name + ".Properties.Resources";

//--- Create the ResourceManager to access the resources
ResourceManager rm = new ResourceManager(resourceName, asm);

//--- Get the stored image 'NoImage' from the resource file
noImage = (Bitmap)rm.GetObject("NoImage");

Problem gelöst.

Viel zu kompliziert,

  1. Kontextmenü auf Resources.resx
    1. Build Action = Embedded Resource
    2. Custom Tool = ResXFileCodeGenerator
  2. Kompilieren

nun kannst du via [Namespace].Properties.Resource.[Name] direkt via C# darauf zugreifen.

Mit freundlichen Grüßen
lutzeslife

Danke ... genau nach soetwas habe ich gesucht. Leider funktioniert das bei mir nicht. Visual Studio 2022. Im Kontext Menue gibt es diese Punkte nicht. Aber sie sind in den File Properties der Datei eingetragen.

Trotzdem kann ich die Resource nicht ansprechen.

Aber es ist okay für mich ... meine 'Lösung' ist nicht die einfachste, aber sie funktioniert für mich.

Trotzdem Danke für das Feedback !

lutzeslife meinte beim Kontextmenü die Properties.

Wenn du die Resource nicht direkt per Code ansprechen kannst, dann schau mal in die generierte Resources.Designer.cs. Dort sollte es eigentlich die erzeugten Eigenschaften geben, wie z.B. bei einem Bild

internal static System.Drawing.Bitmap X {
    get {
        object obj = ResourceManager.GetObject("X", resourceCulture);
        return ((System.Drawing.Bitmap)(obj));
    }
}

Dein Code macht ja auch nicht anderes (nur eben explizit für eine bestimmte Resource ausprogrammiert).

PS: Warum hast du denn 4x Refresh in deinem Kontextmenü?

Leider ist es auf den Screenshot nicht zu erkennen, aber wenn das Custom Tool dort korrekt gesetzt ist wird die Resources.Designer.cs auch entsprechend erstellt, so sieht es zumindestens auch auf dem Screenshot bei dir aus da ein Expander File neben der Resx ist. Dann kannst du per Angabe auch darauf zugreifen.

Wennn deine *.resx im gleichen Namespace liegt wie die Klasse in der du sie verwendest musst du kein Namespace angeben, liegt sie in einem anderen Ordner dann muss der Namespace angegeben werden. Intellisense sollte dir das auch korrekt vorschlagen.

Mit freundlichen Grüßen
lutzeslife

Warum in dem Context Menu 4 Mal 'Refresh' auftaucht kann ich nicht sagen.

Die vorgeschlagene Vorgehensweise und Lösung funktioniert und ich habe mein Programm entsprechend umprogrammiert und schlanker gemacht

Herzlichen Dank !