按名称C#查找textBox,checkBox,任何对象

时间:2012-06-11 18:29:50

标签: c# object arm windows-ce

这真的很奇怪,但我似乎无法在.NET CF中找到特定的textBox(i)或checkBox(i)。在.NET 3.5中,我可以创建此功能:

void checking(int input)
{
    CheckBox checkbox = (CheckBox)this.Controls["checkBox" + input.toString()];
    if(checkbox.isChecked)
      //do something here
}

在这个例子中,它获取了checkBox的名称(即checkBox1,checkBox2等)。

然而,在.NET CF 3.5 for WINCE6中,它不断告诉我在Controls []中需要一个索引,因为它无法将字符串转换为int。有没有人知道如何在不使用foreach语句的情况下找到特定对象? foreach很有用但不适用于此,因为它遍历所有checkBox。由于我是基于ARM开发的,速度就是一切。我正在使用VS2008 C#开发桌面和移动应用程序。

感谢阅读!

3 个答案:

答案 0 :(得分:2)

以下将循环显示10个用作评级星的PictureBox,在我的情况下将它们从灰色变为蓝色。 PictureBoxs在以下约定中命名为pbStarX。其中X是数字1-10。例如:pbStar1,pbStar2,pbStar3等......

注意:使用c#.Net VS 2010

for (int x = 1; x <= 10; x++)
{
    PictureBox pb = (PictureBox)this.Controls.Find("pbStar" + x, true)[0];
    pb.Image = MyProject.Properties.Resources.star_blue;
}

替代方案可能在使用c#.Net Compact Framework

private Control FindControl(Control parent, string ctlName)
{
    foreach(Control ctl in parent.Controls)
    {
        if(ctl.Name.Equals(ctlName))
        {
            return ctl;
        }

        FindControl(ctl, ctlName);                     
    }
    return null;
}

使用上面这样的功能......

Control ctl = FindControl(this, "btn3");
if (ctl != null)
{
    ctl.Focus();
}

答案 1 :(得分:1)

它应该可以工作,但也可以使用

CheckBox checkbox = (CheckBox)this.Controls.Find("checkBox" + input.toString())[0];

答案 2 :(得分:0)

它正在工作,我的朋友:) 请尝试这种方式

bool chkValue;
string chkName="checkbox1";
CheckBox myCheckBox = this.Controls.Find(chkName, true).First() as CheckBox;
chkValue = myCheckBox.Checked;