创建一个可在我的代码中多次重用的函数
本文关键字:函数 代码 我的 一个 创建 | 更新日期: 2023-09-27 18:30:16
我希望能够在代码中多次调用以下函数,以填充表单中的不同组 8 个文本框。
现在,引用正在"tbPlay"中传递,从代码中最初调用它的位置传递。
每次调用此函数时,它都将填充不同的文本框组。
我正在尝试想出一种使用空的 for 循环来创建必要的变量名称来替换我的 case 语句中的 tbPlay0-7 的方法,因此它不仅可用于代码中的一组文本框。 我不确定它能做到。
谁能帮忙。
private void convertBasetoDrawn(string numBase, string reference)
{
string baseNumber = numBase;
for (int i = 0; i < 8; i++)
{
//some code here to create variables to replace the text box names in the
//following case statement
}
switch (baseNumber)
{
case "000":
tbPlay0.Text = "000";
tbPlay0.ForeColor = Color.Red;
tbPlay1.Text = "500";
tbPlay2.Text = "050";
tbPlay3.Text = "005";
tbPlay4.Text = "550";
tbPlay5.Text = "505";
tbPlay6.Text = "055";
tbPlay7.Text = "555";
tbPlay7.ForeColor = Color.Red;
break;
}
}
为每个组创建一个List<TextBox>
:
List<TextBox> list01 = new List<TextBox>() { tbPlay0, tbPlay1, ....};
List<TextBox> list02 = new List<TextBox>() { ..., ... , ....};
// ..
}
并将这样的组传递给函数:
private void convertBasetoDrawn(List<TextBox> list, string numBase, string reference)
{
string[] texts = new string[8]
{ "000", "500", "050", "005", "550", "505", "055", "555" };
for (int t = 0; t < list.Count; t++) list[t].Text = texts[t];
list[0].ForeColor = Color.Red;
list[7].ForeColor = Color.Red;
}
假设文本总是看起来像那样。如果它们依赖于,也许numbase
只要你知道规则,你也可以动态地构建它们。也许即使是简单的更换也可以完成这项工作?
你没有使用reference
,顺便说一句。
现在,我只是在这里猜测,但也许这就是您的文本的模式..:
string[] texts = new string[8]
{ "nnn", "dnn", "ndn", "nnd", "ddn", "dnd", "ndd", "ddd" };
for (int s = 0; s < texts.Length; s++)
texts[s] = texts[s].Replace("d", numBase).Replace("n", reference);
现在你可以这样称呼它:
convertBasetoDrawn(list01, "0","5");
更新:对于我现在理解的规则,您可以执行以下操作:
string newText = "";
for (int s = 0; s < texts.Length; s++)
{
newText = "";
for (int i = 0; i < 3; i++)
{
if (texts[s][i] == 'n') newText += numBase[i];
else newText += (Convert.ToByte(numBase[i].ToString()) +
Convert.ToByte(reference[0].ToString()) ).ToString("0");
}
texts[s] = newText;
}
并像这样称呼它:
convertBasetoDrawn(list01, "001", "5");
或
convertBasetoDrawn(list02, "000", "1");
注意:这里没有结转。.您必须为此定义规则并自己编写代码。
目前尚不清楚您计划如何识别特定的八人组。但是让我们假设你有某种方式。
然后,如果我编写此代码,我将使用UserControl
来封装重复的模式,将八个TextBox
控件(或者更确切地说,是您想要访问的属性)公开为属性。
class TextBoxGroup : UserControl
{
public string Text1
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
public Color ForeColor1
{
get { return textBox1.ForeColor; }
set { textBox1.ForeColor = value; }
}
public string Text2
{
get { return textBox2.Text; }
set { textBox2.Text = value; }
}
public Color ForeColor2
{
get { return textBox2.ForeColor; }
set { textBox2.ForeColor = value; }
}
// ...
public string Text8
{
get { return textBox8.Text; }
set { textBox8.Text = value; }
}
public Color ForeColor8
{
get { return textBox8.ForeColor; }
set { textBox8.ForeColor = value; }
}
}
然后在你的方法中,而不是你计划用来计算组的起始索引的任何逻辑,而只是检索适当的TextBoxGroup
实例并在switch
中使用它,如下所示:
case "000":
textBoxGroup.Text1 = "000";
textBoxGroup.ForeColor1 = Color.Red;
textBoxGroup.Text2 = "500";
textBoxGroup.Text3 = "050";
textBoxGroup.Text4 = "005";
textBoxGroup.Text5 = "550";
textBoxGroup.Text6 = "505";
textBoxGroup.Text7 = "055";
textBoxGroup.Text8 = "555";
textBoxGroup.ForeColor8 = Color.Red;
break;
上述变体将使用采用索引的 setter 方法封装属性。 例如
class TextBoxGroup : UserControl
{
// Initialized in constructor to be the eight TextBoxes
private TextBox[] _textboxes;
public void SetText(int i, string text)
{
_textboxes[i].Text = text;
}
}
当然,如果您不想使用 UserControl
,您可以改为在主窗体中初始化类似的数据结构,以便可以通过索引访问控件。但就我个人而言,我更喜欢UserControl
,因为它可以更轻松地重用并确保所有TextBox
控件组的一致性。