ToolStripButton: что не так с программным назначением изображения - PullRequest
4 голосов
/ 26 ноября 2009

Существует форма с ToolStrip. Эта ToolStrip содержит ToolStripButton. Я хочу назначить изображение этой кнопке:

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

Работает, только если на указанном пути есть save.png. В противном случае я получаю исключение FileNotFound.

Если бы я создал форму через конструктор форм, Visual Studio создаст такой код:

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

toolStripButton9.Image здесь не настоящее имя. Visual Studio берет мой файл save.png и преобразует его в toolStripButton9.Image.

Но я создаю форму программно, без Designer. И мой вопрос, как программно назначить изображение для ToolStripBotton?

Я пытался добавить изображение в проект, но это не сильно помогло. Я понятия не имею, как заставить Visual Studio захватить его и встроить в мой исполняемый файл, чтобы мне не понадобился этот файл в указанном месте.

В MSDN я вижу только решение, подобное , которое :

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

Но это не работает, как я сказал выше. Я понимаю, что есть простое решение, но не вижу его. Не могли бы вы дать мне подсказку?

Ответы [ 2 ]

5 голосов
/ 26 ноября 2009

В Visual Studio откройте папку «Свойства» в обозревателе решений, затем откройте файл Resources.resx и добавьте существующий файл изображения в качестве ресурса. Затем вы можете использовать его программно через статический класс Resource:

Image x = Resources.MyResourceImage;

Полный пример кода, который я предлагаю:

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();
        }
    }
}

Не забудьте добавить использование в пространство имен YourApps Properties. Ваш файл Resources.resx (.cs) находится в этом пространстве имен и используется для предоставления ссылок на объекты строгого типа, таких как изображения. В вашем случае замените «MyResourceImage» на «сохранить» (пропустите кавычки).

пс. Взгляд на самую важную часть моего файла Resources.designer.cs:

internal static System.Drawing.Bitmap MyResourceImage {
    get {
        object obj = ResourceManager.GetObject("MyResourceImage", resourceCulture);
        return ((System.Drawing.Bitmap)(obj));
    }
}
0 голосов
/ 26 ноября 2009

То есть вы имеете в виду настройку изображения из встроенного ресурса?

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

Используйте ответ Webleeuws, если он работает, гораздо проще, чем это: P

...