首页 > 解决方案 > 关于如何使其成为一种方法的任何提示

问题描述

我正在编写周期表,目前只对每个按钮进行编程。现在我想把它变成一个方法,然后进入每个按钮,但我不知道该怎么做。

public void Formule()
    {
        txt_Chemical.Text = h + li + na + k + rb + cs + fr;
    }

    private void btn_H_Click(object sender, EventArgs e)
    {
        H++;
        h = "H";
        Formule();

        if (H > 1)
        {
            h = "";
            h = "H" + H;            
            Formule();
        }

    }

    private void btn_Li_Click(object sender, EventArgs e)
    {
        Li++;
        li = "Li";
        Formule();
        if (Li > 1)
        {
            li = "";
            li = "Li" + Li;
            Formule();
        }

    }

我想将按钮中的尽可能多的代码放入方法中,有什么想法吗?

标签: c#methodssimplify

解决方案


首先是第一件事——正如我在评论中所写:
帮自己一个大忙,开始为变量使用有意义的名称。6个月后你会感谢我的。
我根本无法强调这是多么重要。

现在已经不碍事了,让我们看看如何简化这段代码。

我注意到的第一件事是,每次单击按钮的代码都可以通过使用简单的三元条件而不是繁琐的代码来显着简化,如下所示:

此代码段:

H++;
h = "H";
Formule();

if (H > 1)
{
    h = "";
    h = "H" + H;            
    Formule();
}

可以转换成这样:

H++;
h = (H > 1) ? "H" + H : "H";
Formule();

同样,此代码段:

Li++;
li = "Li";
Formule();
if (Li > 1)
{
    li = "";
    li = "Li" + Li;
    Formule();
}

可以转换成这样:

Li++;
li = (Li > 1) ? "Li" + Li : "Li";
Formule();

现在,查看这两个段代码,基本上我看到在不同的变量(可能是字段)上执行相同的操作 - 当唯一的区别是字符串值时。

广义函数可能是这样的:

void ReCalculate(string name, ref int field, ref string textField)
{
    field++;
    textField = (field > 1) ? name + field : field;
    txt_Chemical.Text = h + li + na + k + rb + cs + fr;
}

你像这样使用它:

private void btn_H_Click(object sender, EventArgs e)
{
    ReCalculate("H", ref H, ref h);
}

private void btn_Li_Click(object sender, EventArgs e)
{
    ReCalculate("Li", ref Li, ref li);
}

话虽这么说,这可能不是最好的方法,但问题是缺乏一个最小的、完整的和可验证的例子,所以我不得不用我对你的实际程序的了解很少。


推荐阅读