C# WinForms PictureBox控件如何提取图片加载到Resources.resx

C# WinForms PictureBox control how to extract images loaded into Resources.resx

我正在尝试了解如何使用 WInForm PictureBox 控件进行操作。

我将简要描述我的应用程序是如何构建的,然后提出我的问题。

我使用的是 C# Visual Studio 2012,但是 Visual Studio 的版本可能无关紧要。

创建一个名为“FunWIthPictureBox”的新 WinForms 应用程序。 调出窗体的设计视图。

添加一个 PIctureBox 控件并将其命名为 pbxPicture。

单击图片框。您会注意到右上角有一个黑色箭头。

单击黑色箭头调出 PictureBox 任务对话框。单击“选择图像”选项。

这会弹出“Select资源”对话框。确保选中“项目资源文件”单选按钮。单击“导入”按钮导入图像。完成后再次单击“导入”并添加第二张图像。最后点击“确定”。我的图片名为“Picture1.jpg”和“Picture2.jpg”。

现在您已经将两个位图图像加载到项目的资源文件 (Properties\Resources.resx) 中。

双击窗体弹出窗体的加载事件。

您可以使用以下代码将 Picture Box 的图像设置为 Picture1.jpg... pbxPicture.Image = FunWIthPictureBox.Properties.Resources.Picture1; 请注意,“FunWithPictureBox”是命名空间。

如果你想使用其他图片,你可以像这样更新代码行.. pbxPicture.Image = FunWIthPictureBox.Properties.Resources.图片2;

好的,到目前为止一切顺利。我正在尝试弄清楚如何提取所有已加载到 .Properties.Resources 中的图像并将这些图像加载到图像列表 (List) 中。

使用反射(和 Google)我能够想出以下内容..

(使用 System.Reflection 添加)

 private void PictureBoxForm_Load(object sender, EventArgs e)
    {
        pbxPicture.Image = FunWithPictureBox.Properties.Resources.Picture1;
        var properties = typeof(Properties.Resources).GetProperties(BindingFlags.NonPublic | BindingFlags.Static);
        foreach (var propertyinfo in properties)
        {
            if (propertyinfo.PropertyType.ToString() == "System.Drawing.Bitmap")
            {
                MessageBox.Show(propertyinfo.Name + " " + propertyinfo.PropertyType.ToString());
            }
        }
    }

这几乎给了我想要的东西。我能够从资源文件中识别图像。

如何将这些图像添加到图像列表中?我知道图像的名称,但不知道如何访问图像并将其添加到列表中。

像这样...

private void PictureBoxForm_Load(object sender, EventArgs e)
    {
        List<Image> lstImages = new List<Image>();
        pbxPicture.Image = FunWithPictureBox.Properties.Resources.Picture1;
        var properties = typeof(Properties.Resources).GetProperties(BindingFlags.NonPublic | BindingFlags.Static);
        foreach (var propertyinfo in properties)
        {
            if (propertyinfo.PropertyType.ToString() == "System.Drawing.Bitmap")
            {
                lstImages.Add(propertyinfo.Name); //This code does not wwork :-(
            }
        }
    }

有办法吗?

尝试将代码更改为:

        private void PictureBoxForm_Load ( object sender , EventArgs e ) {
            List<Image> lstImages = new List<Image> ( );
            //pbxPicture.Image = FunWithPictureBox.Properties.Resources.Picture1;
            var properties = typeof ( Properties.Resources ).GetProperties ( System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static );
            foreach ( var propertyinfo in properties ) {
                if ( propertyinfo.PropertyType.ToString ( ) == "System.Drawing.Bitmap" ) {
                    lstImages.Add ( ( Bitmap ) Properties.Resources.ResourceManager.GetObject ( propertyinfo.Name ) );
                }
            }
        }

Property.Resources 有一个 属性 名为 Resourcemanager 并且它有一个函数 return 一个对象使用她的名字,你如何使用 propertyInfo.Name 它可能 return 位图。