这真的很奇怪,但我似乎无法在.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#开发桌面和移动应用程序。
感谢阅读!
答案 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;