当我单击Windows窗体上的复选框时,它会启用一个文本框并将光标置于其中以备输入。代码相对简单:
private void chkLatte_CheckedChanged(object sender, EventArgs e)
{
if(chkLatte.Checked)
{
txtLatte.Enabled = true;
txtLatte.Focus();
}
else
{
txtLatte.Enabled = false;
txtLatte.Text = "0";
}
}
现在,这就是问题。我有很多这些复选框,所以我想要的是这样的:
public void setCheckBox(string chkName, string txtName)
{
if (chkName.Checked)
{
txtName.Enabled = true;
txtName.Focus();
}
else
{
txtName.Enabled = false;
txtName.Text = "0";
}
}
现在,我可以调用该方法并传递适当的参数,如下所示:
private void chkMocha_CheckedChanged(object sender, EventArgs e)
{
setCheckBox(chkMocha,txtMocha);
}
当然,这不起作用:.Checked .Enabled .Focus()等只能使用复选框对象,我将chkName定义为字符串
我应该如何重新编写程序setCheckBox来克服这个问题?
答案 0 :(得分:6)
为什么不按原样传递对象发件人?
我的意思是这样的:
public void setCheckBox(CheckBox chk, TextBox txt)
{
if (chk.Checked)
{
txt.Enabled = true;
txt.Focus();
}
else
{
txt.Enabled = false;
txt.Text = "0";
}
}
当然是铸造:
在设计师中你有类似的东西:
private System.Windows.Forms.TextBox txtMocha;
由于这个原因,你将解决很多问题。
private void chkMocha_CheckedChanged(object sender, EventArgs e)
{
setCheckBox((CheckBox)sender, txtMocha);
}
此外,我必须说,你提供的代码不起作用......你已经想到了。
如果要将参数作为字符串传递,请使用:
答案 1 :(得分:1)
解决此问题的一种方法是为所有复选框分配相同的处理程序,甚至
checkbox1.Check += chk_CheckedChanged;
checkbox2.Check += chk_CheckedChanged;
private void chk_CheckedChanged(object sender, EventArgs e)
{
// do your logic here
}