我正在试图弄清楚如何使用WInForm PictureBox控件执行某些操作。
我将简要描述我的应用程序是如何构建的,然后提出我的问题。
我正在使用C#Visual Studio 2012,但Visual Studio的版本可能并不重要。
创建一个名为“FunWIthPictureBox”的新WinForms应用程序。 打开Form的设计视图。
添加PIctureBox控件并将其命名为pbxPicture。
单击图片框。你会注意到右上角有一个黑色箭头。
单击黑色箭头以显示PictureBox任务对话框。单击“选择图像”选项。
这将打开“选择资源”对话框。确保选中“项目资源文件”单选按钮。单击“导入”按钮导入图像。完成后,再次单击“导入”并添加第二个图像。最后点击“确定”。我的照片被命名为“Picture1.jpg”& “Picture2.jpg”。
现在您已将两个位图图像加载到Project的资源文件(Properties \ Resources.resx)中。
双击表单以显示表单的加载事件。
您可以使用以下代码将Picture Box的图像设置为Picture1.jpg ... pbxPicture.Image = FunWIthPictureBox.Properties.Resources.Picture1; 请注意,“FunWithPictureBox”是命名空间。
如果您想使用其他图片,您可以像这样更新代码行。 pbxPicture.Image = FunWIthPictureBox.Properties.Resources.Picture2;
好到目前为止一切顺利。我正在试图弄清楚如何提取已加载到.Properties.Resources中的所有图像,并将这些图像加载到图像列表(List)中。
使用Reflection(和谷歌)我能够提出以下内容..
(使用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 :-(
}
}
}
有办法做到这一点吗?
答案 0 :(得分:1)
尝试将代码更改为:
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的属性,它有一个函数,用于使用她的名称返回一个对象,如何使用propertyInfo.Name,它可能返回Bitmap。