C# 如何执行函数返回的字符串

C# 如何执行函数返回的字符串,c#,winforms,C#,Winforms,我有一个表单,允许您在购买时添加多个产品ID。 ! 当你启动程序时,这里是 所以每次你按下一个“加号按钮”另一行 为了避免太多的代码行,我决定创建一个函数,这样它就可以使用数字或按下加号按钮的行,并向其中添加1,这样下一行就会出现 现在它返回一个包含代码的字符串,但我不知道如何执行它 我已经搜索了如何执行字符串,但解决方案永远无法应用于我的代码 //function public string plus(int n) { string r="";

我有一个表单,允许您在购买时添加多个产品ID。 !

当你启动程序时,这里是

所以每次你按下一个“加号按钮”另一行

为了避免太多的代码行,我决定创建一个函数,这样它就可以使用数字或按下加号按钮的行,并向其中添加1,这样下一行就会出现

现在它返回一个包含代码的字符串,但我不知道如何执行它

我已经搜索了如何执行字符串,但解决方案永远无法应用于我的代码

//function
public string plus(int n)
        {
            string r="";

            r = "label" + (n + 1) + ".Visible = true;";
            r += "combobox" + (n + 1) + ".Visible = true;";
            r += "plusButton" + (n + 1) + ".Visible = true;";
            r += "minusButton" + (n + 1) + ".Visible = true;";

            return r;
        }

//plus button
private void plus1_Click(object sender, EventArgs e)
        {
            //code to execute (plus(1));
        }
如有意见和建议,将不胜感激,解决方案更是如此

从字符串执行c#expression实际上是个坏主意,在这种情况下并不是您想要的。你可以看到一个详细的答案,但你真的不应该

我建议您将所有组件存储在一个集合中,如下所示

public void plus(int n)
{
    labelsArray[n].Visible =
    comboboxArray[n].Visible =
    plusButtonArray[n].Visible =
    minusButtonArray[n].Visible = true;
}

private void plus1_Click(object sender, EventArgs e)
{
    plus(1);
}
您还需要声明新的数组来索引控件,并用它们填充它们。例如,对于标签阵列:

private Label[] labelsArray;


// Replace Form1 with the name of your class. This the constructor of your form.
public Form1()
{
    labelsArray = new [] {label1, label2, label3, ... };
}

最后,您还可以动态创建这些控件,而不是切换它们的可见性。

您不需要将代码定义为字符串。有更好的方法可以做到这一点。如果不希望将控件保存在单独的集合中,并且所有控件都是
窗体的子控件,则可以使用以下函数运行相同的代码:

public void plus(int n)
{
    ((Label)this.Controls.Find("label" + (n + 1), false)[0]).Visible = true;
    ((ComboBox)this.Controls.Find("combobox" + (n + 1), false)[0]).Visible = true;
    ((Button)this.Controls.Find("plusButton" + (n + 1), false)[0]).Visible = true;
    ((Button)this.Controls.Find("minusButton" + (n + 1), false)[0]).Visible = true;
}

你为什么要把事情弄复杂?为什么不在代码中使用此字符串实现您想要实现的功能?Wpf、winforms、web、应用程序?你的前端是什么?我还有一个减号按钮,它会删除选中的行和后面的所有行。最大行数为20行,想象一下有19个按钮和这么多代码(第二行上的减号按钮必须删除18行,每行有4个组件,因此该按钮中只有72行代码…如果我让这个加号函数工作,减号也会工作。我给出了加号示例,因为它不太复杂。您可能想要一个带有
+
按钮列的DataGridView。不是吗工作,表示“当前上下文中不存在名称“labelsArray”,同样的错误all@mjkjhgf你需要声明这些变量并用你的控件填充它们。你应该能够自己解决这个问题。恐怕我不明白。。sorry@mjkjhgf我添加了一个关于如何为标签执行此操作的示例。只需重复其他控件的逻辑即可。谢谢您,抱歉等待,我感觉不舒服:/wo真是太迷人了!再次感谢你!!