Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建一个过程以减少C语言中的冗余代码#_C# - Fatal编程技术网

C# 创建一个过程以减少C语言中的冗余代码#

C# 创建一个过程以减少C语言中的冗余代码#,c#,C#,当我单击Windows窗体上的复选框时,它将启用一个文本框并将光标设置为可供输入。代码相对简单: private void chkLatte_CheckedChanged(object sender, EventArgs e) { if(chkLatte.Checked) { txtLatte.Enabled = true; txtLatte.Focus(); } else

当我单击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);
    }
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
}

这并没有回答最初的问题:单个处理程序无法知道要对哪个文本框进行操作,除非逻辑能够从发送者的身份中推断出来。这样一种机制(例如,将复选框链接到文本框的字典)应该是解决方案的一部分,以使其完整。。。