3

我打开Resources.resx了一个WinForms 应用程序项目的文件并在那里复制了图像。我正在使用下面显示的代码从资源中获取图像,但出现以下错误:

'null' 的值对 'stream' 无效。

错误发生在这一行:

btn.BackgroundImage = new Bitmap(
  System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream(test));

相关代码:

private void genericButton_event(object sender, EventArgs e)
{
    var btn = (Button)sender;
    string test = "StudentModule.Properties.Resources" + btn.Name + ".png";

    //Getting the error here:
    btn.BackgroundImage = new Bitmap(System
                                       .Reflection
                                       .Assembly
                                       .GetEntryAssembly()
                                       .GetManifestResourceStream(test));
}

的值为test"StudentModule.Properties.ResourcesbtnAbout.png"但我认为应该是:"StudentModule.Properties.Resources.btnAbout.png"。我也试过这条线,但它不工作:

string test = "StudentModule.Properties.Resources." + btn.Name + ".png";

我在这里做错了什么?

4

1 回答 1

4

当找不到流时,GetManifestResourceStream() 返回 null。然后它将轰炸位图构造函数。

所以你使用的字符串是错误的。目前尚不清楚您是如何嵌入资源的。强烈支持使用资源设计器,项目 + 资源选项卡。单击“添加资源”按钮上的箭头,选择“添加现有文件”并选择文件。然后,您可以使用 ResourceManager 获取位图:

var imageName = "Chrysanthemum";
btn.BackgroundImage = (Bitmap)Properties.Resources.ResourceManager.GetObject(imageName);

请注意,资源名称只是在资源设计器中显示的普通资源名称。

于 2013-10-26T11:51:15.027 回答