2009-11-26 8 views
4

Il existe un formulaire avec un ToolStrip. Cette ToolStrip contient un ToolStripButton. Je souhaite attribuer une image à ce bouton:ToolStripButton: ce qui ne va pas avec l'assignation d'une image par programme

this.btnSaveFile.Image = Bitmap.FromFile("C:\\Work\\Icons\\png\\save.png"); 

Fonctionne uniquement si save.png est spécifié sur le chemin spécifié. Sinon, j'obtiens une exception FileNotFound.

Si je créé un formulaire via le formulaire Designer, Visual Studio créeraient un code comme ceci:

this.toolStripButton9.Image = ((System.Drawing.Image) (resources.GetObject("toolStripButton9.Image"))); 

toolStripButton9.Image est pas un vrai nom ici. Visual Studio prend mon fichier save.png et le transforme en toolStripButton9.Image.

Mais je crée un formulaire par programmation, sans Designer. Et ma question est comment assigner une image à ToolStripBotton par programme?

J'ai essayé d'ajouter l'image au projet, mais cela n'a pas beaucoup aidé. Je n'ai aucune idée de comment rendre Visual Studio attraper et incorporer dans mon exécutable de sorte que je n'aurais pas besoin de ce fichier sur l'emplacement spécifié.

Dans MSDN, je ne vois que la solution comme that:

this.toolStripButton1.Image = Bitmap.FromFile("c:\\NewItem.bmp"); 

Mais il ne marche pas » travail comme je l'ai dit ci-dessus. Je comprends qu'il existe une solution simple mais ne la vois pas. Pourriez-vous s'il vous plaît me donner un indice?

+0

Je mis à jour ma réponse avec des informations supplémentaires qui nous l'espérons vous aider. – Webleeuw

+0

Webleeuw, oui, ça marche! Merci beaucoup pour cet exemple! – Racoon

Répondre

5

Dans Visual Studio, ouvrez votre dossier "Propriétés" dans l'explorateur de solution, puis ouvrez le fichier Resources.resx et ajoutez un fichier image existant en tant que ressource. Vous pouvez ensuite utiliser programme via la classe statique ressource:

Image x = Resources.MyResourceImage; 

Un exemple complet du code, je suggère:

using System.Windows.Forms; 
using Testapplication.Properties; 

namespace Testapplication { 
    public class Class1 { 
     public Class1() { 
      Form MyForm = new Form(); 
      ToolStrip MyToolStrip = new ToolStrip(); 
      MyForm.Controls.Add(MyToolStrip); 

      ToolStripButton MyButton = new ToolStripButton(); 
      MyToolStrip.Items.Add(MyButton); 

      MyButton.Image = Resources.MyResourceImage; 

      MyForm.Show(); 
     } 
    } 
} 

Ne pas oublier d'ajouter un espace de noms à l'aide à l'Propriétés de YourApps. Votre fichier Resources.resx (.cs) réside dans cet espace de noms et est utilisé pour fournir des références d'objet de type fort comme des images. Dans votre cas, remplacez "MyResourceImage" par "save" (omettez les guillemets).

ps. Un coup d'œil à la partie la plus importante de mon dossier Resources.designer.cs:

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

Webleeuw, merci pour la réponse. Désolé mais ça ne marche pas. J'ai ajouté save png.file via Propriétés-> Ressources. Maintenant je le vois dans le dossier Ressource sous mon projet. Mais comment puis-je y faire référence? Que puis-je placer à la place de MyResourceImage "? File resource.Designer.cs a été créé automatiquement avec ce bout de code: object obj = ResourceManager.GetObject (" save ", resourceCulture); Mais j'ai échoué à utiliser des constructions comme celle-ci .. Une idée? – Racoon

+0

Si vous laissez Intellisense remplir les blancs.Que se passe-t-il si vous tapez "Ressources". Quelles suggestions donne-t-il? – RvdK

+0

Webleeuw, oui, ça marche! Merci beaucoup pour cet exemple! – Racoon

0

l'image Vous voulez dire la mise d'une ressource intégrée?

string res = "MyAssembly.Resources.toolStripButton9.Image"; 
Stream s = this.GetType().Assembly.GetManifestResourceStream(res); 
Icon icon = Icon.FromStream(s); 

Utilisez Webleeuws réponse si cela fonctionne, beaucoup plus facile que ceci: P

+0

Merci :), ça marche pour moi, mais je ne sais pas si c'est la solution que cherche Racoon. – Webleeuw

+0

PoweRoy, merci pour la réponse. Désolé, je ne comprends pas. Je n'ai pas toolStripButton9.Image puisque je n'utilise pas de concepteur de formulaires. Donc, je n'ai pas une idée de comment utiliser ce morceau de code ... Webleeuws semble proche de la solution mais ... s'il vous plaît voir mon commentaire à sa réponse. – Racoon