有关如何使此方法成为一种方法的任何提示
Any tips on how to make this a method
我正在为一个周期性的 table 编程,目前只为每个按钮编程。现在我想把它变成一个方法,然后直接进入每个按钮,但我不知道该怎么做。
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();
}
}
我想尽可能多地将按钮中的代码放入一个方法中,有什么想法吗?
只是 Dictionary
可以做什么的一个例子:
using System;
using System.Collections.Generic;
class Program
{
static Dictionary<string,int> Values {get;set;}
static void Main()
{
Values = new Dictionary<string,int>();
Values["Li"] = 1;
Values["H"] = 1;
Click("Li"); // displays Li2 H1
Click("H"); // displays Li2 H2
}
static void Click(string element)
{
Values[element]++;
DisplayElements();
}
static void DisplayElements()
{
foreach(var v in Values)
{
Console.WriteLine(v.Key + v.Value);
}
}
}
此外,请考虑:
private void btn_H_Click(object sender, EventArgs e)
{
H++;
h = "H";
Formule();
if (H > 1)
{
h = "";
h = "H" + H;
Formule();
}
}
可以写成:
private void btn_H_Click(object sender, EventArgs e)
{
H++;
h = "H";
if (H > 1)
{
h += H;
}
Formule();
}
第一件事就是第一 - 正如我在评论中所写:
帮自己一个大忙,开始为变量使用有意义的名称。六个月后你会感谢我的。
我根本无法强调那有多重要。
至此,我们来看看如何简化这段代码。
我注意到的第一件事是,通过使用简单的三元条件而不是繁琐的代码,可以显着简化每次按钮单击的代码,如下所示:
这段代码段:
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);
}
话虽这么说,这可能不是最好的方法,但问题缺少 minimal, complete, and verifiable example 所以我不得不利用我对你的实际程序知之甚少的知识来工作。
我正在为一个周期性的 table 编程,目前只为每个按钮编程。现在我想把它变成一个方法,然后直接进入每个按钮,但我不知道该怎么做。
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();
}
}
我想尽可能多地将按钮中的代码放入一个方法中,有什么想法吗?
只是 Dictionary
可以做什么的一个例子:
using System;
using System.Collections.Generic;
class Program
{
static Dictionary<string,int> Values {get;set;}
static void Main()
{
Values = new Dictionary<string,int>();
Values["Li"] = 1;
Values["H"] = 1;
Click("Li"); // displays Li2 H1
Click("H"); // displays Li2 H2
}
static void Click(string element)
{
Values[element]++;
DisplayElements();
}
static void DisplayElements()
{
foreach(var v in Values)
{
Console.WriteLine(v.Key + v.Value);
}
}
}
此外,请考虑:
private void btn_H_Click(object sender, EventArgs e)
{
H++;
h = "H";
Formule();
if (H > 1)
{
h = "";
h = "H" + H;
Formule();
}
}
可以写成:
private void btn_H_Click(object sender, EventArgs e)
{
H++;
h = "H";
if (H > 1)
{
h += H;
}
Formule();
}
第一件事就是第一 - 正如我在评论中所写:
帮自己一个大忙,开始为变量使用有意义的名称。六个月后你会感谢我的。
我根本无法强调那有多重要。
至此,我们来看看如何简化这段代码。
我注意到的第一件事是,通过使用简单的三元条件而不是繁琐的代码,可以显着简化每次按钮单击的代码,如下所示:
这段代码段:
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);
}
话虽这么说,这可能不是最好的方法,但问题缺少 minimal, complete, and verifiable example 所以我不得不利用我对你的实际程序知之甚少的知识来工作。