获取PictureboxImage的resourcename

时间:2012-09-13 08:30:23

标签: c# image resources picturebox resource-files

我有Picturebox,用户可以从资源文件中选择backgroundimage

稍后我想从resourcename中获取picturebox

我已经尝试过了:

MessageBox.Show(((PictureBox)sender).BackgroundImage.ToString());

但是它给了我照片的格式......不是这样的:

MessageBox.Show(((PictureBox)sender).BackgroundImage.Name.ToString());

我已经知道在设置图片时将Tag设置为Pictureboxpicturename,但这很烦人......

那么如何才能轻松获得backgroundimage Picturebox上使用的资源名称?

我想我必须解释整个情况:
我有一张带有很多raidbuttons的表格......
如果您选择其中一个按钮并单击面板,则面板将更改为所选的radiobuttonimage ...

面板的点击事件:

PanelClick(object obj ,...)
{
    if(radiobuttonApple.checked)
    {
        obj.backgroundimage = resource.apple;
    }

    if(radiobuttonPear.checked)
    {
        obj.backgroundimage = resource.Pear;
    }
}

还有一百多个...... 后来我想知道backgroundimage是什么资源文件..

不是这样的:

(如果我将放射性按钮命名为资源)

PanelClick(object obj ,...)
{
   obj.backgroundimage = resource[selectedradiobutton.Name]
   obj.tag = selectedradiobutton.Name
}




所以现在即将使用LINQ:

RadioButton checkedRadioButton = panel1.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked);
obj.tag = checkedRadioButton.Text;

因此我只需要知道如何通过名称来获取资源,例如:

obj.backgroundimage = resource[checkedRadioButton.Text];


并使用资源管理器:

var resman = new System.Resources.ResourceManager(
    "RootNamespace.Pictures",
    System.Reflection.Assembly.GetExecutingAssembly()
)
var image = resman.GetPicture("checkedRadioButton.Text");

我希望这会有效..

1 个答案:

答案 0 :(得分:1)

根据选中的单选按钮创建一个返回资源的方法。

示例:

private resource checkResource()
{
    if(radiobuttonApple.checked)
    {
        return resource.apple;
    }

    if(radiobuttonPear.checked)
    {
        return resource.Pear;
    }
}

然后你可以像这样使用

PanelClick(object obj ,...)
{
    obj.backgroundimage = checkResource();
}

PanelClick(object obj ,...)
{
   obj.backgroundimage = checkResource();
   obj.tag = selectedradiobutton.Name
}

编辑:

正如您所说,根据每个分配的迭代次数,此方法可能会有不同的问题。为了避免这种情况,并且根据另一种解决方案,您可以使用单个事件来处理所有单选按钮状态更改,如下所示:

首先,每当radioButton的状态发生变化时,创建一个要分配的资源变量。即

 private Resource bgResource;

 private void radioButton_CheckedChanged(object sender, EventArgs e)
 {
      RadioButton obj = sender as RadioButton;
      bgResource = resman.GetPicture(obj.Tag);
 }

然后,只要你想改变背景,你就可以说:

obj.BackgroundImage = bgResource;