我有Picturebox
,用户可以从资源文件中选择backgroundimage
。
稍后我想从resourcename
中获取picturebox
。
我已经尝试过了:
MessageBox.Show(((PictureBox)sender).BackgroundImage.ToString());
但是它给了我照片的格式......不是这样的:
MessageBox.Show(((PictureBox)sender).BackgroundImage.Name.ToString());
我已经知道在设置图片时将Tag
设置为Picturebox
和picturename
,但这很烦人......
那么如何才能轻松获得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");
我希望这会有效..
答案 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;