引用由变量定义的对象

时间:2013-04-21 14:10:06

标签: c#

我有一个问题,我最近无法解决。 我有这个代码

        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'吗?

1 个答案:

答案 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调用的代码将对同一个对象进行操作,它们只是指向同一对象的引用。