0

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

后来我想resourcename摆脱picturebox

我已经尝试过这个:

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

但它给了我图片的格式..没有类似的东西:

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

并且我已经考虑在设置图像时将 aTag设置Pictureboxpicturename......但这很烦人......

那么如何轻松获取用作backgroundimageat的资源的名称Picturebox

我想我必须解释一下整个情况:

我有一个带有很多 raidbuttons 的表单...
如果您选择其中一个按钮并单击面板,
面板将更改为选定的单选按钮图像...

面板的点击事件:

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

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

还有一百多个......后来我想知道背景图像是哪个资源文件......

是不是有这样的:

(如果我将单选按钮命名为资源)

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");

我希望这会奏效..

4

1 回答 1

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
}

编辑:

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

首先,创建一个资源变量,以便在单选按钮的状态更改时分配给它。IE。

 private Resource bgResource;

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

然后任何时候你想改变背景,你可以简单地说:

obj.BackgroundImage = bgResource;
于 2012-09-13T10:06:06.680 回答