C# 创建一个过程以减少C语言中的冗余代码#
当我单击Windows窗体上的复选框时,它将启用一个文本框并将光标设置为可供输入。代码相对简单:C# 创建一个过程以减少C语言中的冗余代码#,c#,C#,当我单击Windows窗体上的复选框时,它将启用一个文本框并将光标设置为可供输入。代码相对简单: private void chkLatte_CheckedChanged(object sender, EventArgs e) { if(chkLatte.Checked) { txtLatte.Enabled = true; txtLatte.Focus(); } else
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);
}
public void setCheckBox(CheckBox chk, TextBox txt)
{
if (chk.Checked)
{
txt.Enabled = true;
txt.Focus();
}
else
{
txt.Enabled = false;
txt.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);
}
public void setCheckBox(CheckBox chk, TextBox txt)
{
if (chk.Checked)
{
txt.Enabled = true;
txt.Focus();
}
else
{
txt.Enabled = false;
txt.Text = "0";
}
}
当然,这是行不通的:.Checked.Enabled.Focus()等只适用于复选框对象,我将chkName定义为字符串
如何重新编写过程setCheckBox以克服此问题?为什么不按原样传递对象发送器 我的意思是这样的:
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);
}
public void setCheckBox(CheckBox chk, TextBox txt)
{
if (chk.Checked)
{
txt.Enabled = true;
txt.Focus();
}
else
{
txt.Enabled = false;
txt.Text = "0";
}
}
当然还有铸造:
在designer中,您可以看到如下内容:
private System.Windows.Forms.TextBox txtMocha;
因此,你将解决很多问题
private void chkMocha_CheckedChanged(object sender, EventArgs e)
{
setCheckBox((CheckBox)sender, txtMocha);
}
还有,我不得不说,你给的代码不起作用。。。你已经猜到了
如果要将参数作为字符串传递,请使用以下命令:
解决这个问题的一种方法是将相同的处理程序分配给所有复选框
checkbox1.Check += chk_CheckedChanged;
checkbox2.Check += chk_CheckedChanged;
private void chk_CheckedChanged(object sender, EventArgs e)
{
// do your logic here
}
这并没有回答最初的问题:单个处理程序无法知道要对哪个文本框进行操作,除非逻辑能够从发送者的身份中推断出来。这样一种机制(例如,将复选框链接到文本框的字典)应该是解决方案的一部分,以使其完整。。。