我在Windows Forms应用程序中显示了100个连续的按钮和复选框,并在其中保存了一些数字的数据库中。
我的目的是根据数据库中保存的数字隐藏按钮和复选框。例如,在我的数据库中,我有4个数字:2、4、9和10。因此,我想隐藏button2,checkbox2,button4,checkbox4,button9,checkbox9,button10,checkbox10。
这是我尝试过的:
SqlCeCommand cmnd = con.CreateCommand();
cmnd.CommandText = "SELECT * FROM register_db WHERE semester = @s AND department = @d AND course = @c";
cmnd.Parameters.AddWithValue("@s", semester);
cmnd.Parameters.AddWithValue("@d", department);
cmnd.Parameters.AddWithValue("@c", course);
SqlCeDataReader rd = cmnd.ExecuteReader();
while (rd.Read())
{
string number = rd[0];
button[number].hide();
checkbox[number].hide();
// these are the main things that I didn't know how to do
}
所有Windows窗体控件都有一个.Hide()
方法。该代码区分大小写,因此您无法正确调用它。它需要大写:
button[number].Hide();
checkbox[number].Hide();
另外,您可以设置其.Visible
属性:
button[number].Visible = false;
checkbox[number].Visible = false;
还是您在控制数组方面遇到麻烦?如姓名button1
,button2
等等都没有在大多数情况下,特别有意义。但是,如果您的控件确实打算成为控件的有序集合的一部分,则可以在表单上创建一个集合来表示它们:
protected IList<Button> Buttons
{
get
{
return new List<Button>
{
button1, button2, button3; // etc.
};
}
}
否则,访问名称本身中的数字值将是一项反思工作,在许多情况下,这实际上并不是您想要的方向。建立一个满足您需求的结构比避开一个不满足需求的结构要好。
这样,您可以将控件作为数组访问:
Buttons[number].Hide();
Checkboxes[number].Hide();
您可以更进一步,将两者结合在一起,因为它们是配对在一起的。像这样的东西:
private class ControlGroup
{
public Button Button { get; set; }
public CheckBox CheckBox { get; set; }
public void Hide()
{
this.Button.Hide();
this.CheckBox.Hide();
}
}
(您可以在该类中添加进一步的错误检查,以防止出现空值等。也许也为该类提供一个更有意义的名称。)
然后,您的收藏集变为:
protected IList<ControlGroup> ControlGroups
{
get
{
return new List<ControlGroup>
{
new ControlGroup { Button = button1, CheckBox = checkbox1 },
new ControlGroup { Button = button2, CheckBox = checkbox2 },
new ControlGroup { Button = button3, CheckBox = checkbox3 }
// etc.
};
}
}
这样可以在适当的情况下将所有内容按逻辑分组到一个更智能的数据结构中,从而使调用代码更加容易:
ControlGroups[number].Hide();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句