我有一个问题,我最近无法解决。 我有这个代码
foreach (Hashtable i in (ArrayList)inv["database"])
{
if (i != null)
{
if (i["type"].ToString() == "1")
{
if (i["dataValue"].ToString() != "0")
{
inv{nn}.Image = Program.Properties.Resources._i["type"].ToString()+"-"+i["dataValue"].ToString();
}
else
{
inv{nn}.Image = Program.Properties.Resources._i["type"].ToString()
}
}
}
nn++;
}
我有36个控件(这是我项目中的一个类,所以不是“vanilla”一个),而且每一个都是一个“图片框”。我有以下语法的505个图像: 如果数据值为0,那么它是{typeID} .png,如果数据值大于0,那么{typeID} - {dataValue} .png
例如,如果它是第一个循环,i [“type”]。ToString()= 1和i [“dataValue”]。ToString()= 3,inv0的Image变为Program.Proporties.Resources。 _1-3 当第二个循环到来时,inv1的图像改变等......直到inv35
这样的事情可能吗?我试过了
InterpolationBox x = Form1.FindControl("inv"+nn)
我似乎没有使用System.Web.UI的FindControl(FrameWork 4)这样的东西。
我试过
InterpolationBox x = this.Controls.Find("inv" + nn, false);
我无法将'System.Windows.Forms.Control []'类型的对象强制转换为'Program.InterpolatedBox'。无论如何,如果我摆脱了这个错误,我能改变那个实际的图片框,而不仅仅是复制的'x'吗?
答案 0 :(得分:1)
InterpolationBox x = this.Controls.Find("inv" + nn, false);
问题所在。
你得到的错误是:
无法将类型为“System.Windows.Forms.Control []”的对象强制转换为类型 'Program.InterpolatedBox'。
你可以看到它说它不能将System.Windows.Forms.Control
的数组转换为Program.InterpolationBox
这是明智的,因为InterpolationBox
是一个控件。
Find
方法返回一个控件数组,而不只是一个,所以你需要查看数组并拉出你所追求的控件(即使它只是第一个)。
关于更改x
是否会更改使用Controls.Find()
给出的控件的问题,答案是肯定的。
.NET中的对象是引用的,这意味着x
不是InterpolationBox
它是对内存中InterpolationBox
的引用。
你甚至可以这样做:
var a = x;
var b = a;
var c = b;
c.DoSomething();
您针对c
调用的代码将对同一个对象进行操作,它们只是指向同一对象的引用。