C# 更改多个文本框';用户输入的背景色

C# 更改多个文本框';用户输入的背景色,c#,C#,我有多达10个文本框,我想让它们改变用户输入的背景色 目前我使用的代码是: private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "1") { textBox2.BackColor = Color.DarkRed; textBox2.Visible = true; textBox3.Visible = false;

我有多达10个文本框,我想让它们改变用户输入的背景色

目前我使用的代码是:

private void button1_Click(object sender, EventArgs e)
{
    if (textBox1.Text == "1")
    {
        textBox2.BackColor = Color.DarkRed;
        textBox2.Visible = true;
        textBox3.Visible = false;
        textBox4.Visible = false;
        textBox5.Visible = false;
        textBox6.Visible = false;
        textBox7.Visible = false;
        textBox8.Visible = false;
    }
    else if (textBox1.Text == "2")
    {.......

但是,为10个(或更多)盒子制作这个需要花费太长时间。

您可以使用以下方法:

Control[] controls = { textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8 };
int controlNum;
if(int.TryParse(textBox1.Text.Trim(), out controlNum)
    && controlNum > 0 && controlNum <= controls.Length)
{
    Control activeControl = controls[controlNum - 1];
    activeControl.BackColor = Color.DarkRed;
    activeControl.Visible = true;
    foreach(Control unactiveControl in controls.Where(c => c != activeControl))
        unactiveControl.Visible = false;
}
Control[]controls={textBox2、textBox3、textBox4、textBox5、textBox6、textBox7、textBox8};
int-controlNum;
if(int.TryParse(textBox1.Text.Trim(),out controlNum)
&&controlNum>0&&controlNum c!=activeControl)
unactiveControl.Visible=false;
}
如果您希望对用户指定的控件数量应用更改,请执行以下操作:

int controlCount;
if (int.TryParse(textBox1.Text.Trim(), out controlCount)
    && controlCount > 0 && controlCount <= controls.Length)
{
    var activeControls = controls.Take(controlCount);
    var unactiveControls = controls.Skip(controlCount);
    foreach (Control activeControl in activeControls)
    {
        activeControl.BackColor = Color.DarkRed;
        activeControl.Visible = true;
    }
    foreach (Control unactiveControl in unactiveControls)
    {
        unactiveControl.BackColor = Color.Black;
        unactiveControl.Visible = false;
    }
}
int控制计数;
if(int.TryParse(textBox1.Text.Trim(),out controlCount)

&&controlCount>0&&controlCount减少您将要编写的代码量的一种方法是稍微打开它的头部。不要考虑“如果textbox1为“1”,然后设置textbox2可见”,而是考虑“textbox2何时应该可见?”

例如,根据您展示的有限逻辑:

textbox2.Visible = textbox1.Text == "1";

1
时,这会将visible设置为
true
,否则
false

首先将需要更改颜色/可见性的所有文本框添加到一个面板中

一旦他们都在你可以使用以下

int counter;
if(!int.TryParse(textBox1.Text, out counter))
    return;

int currentCounter = 0;
foreach(var tb in panelName.Controls.OfType<TextBox>())
{
    if(currentCounter++ < counter)
    {
        tb.BackColor = Color.DarkRed;
        tb.Visible = true;
    }
    else
    {
        tb.Visible = false;
    }
}
int计数器;
如果(!int.TryParse(textBox1.Text,输出计数器))
返回;
int currentCounter=0;
foreach(panelName.Controls.OfType()中的var tb)
{
如果(currentCounter++<计数器)
{
tb.BackColor=Color.DarkRed;
tb.可见=真;
}
其他的
{
tb.可见=假;
}
}

什么需要时间,实际编写还是程序性能?这是仅有的10个框吗?逻辑是否只是设置“下一个”文本框的颜色?@Sayse抱歉描述不好..实际编写将是它,因为我将添加更多文本框(100+或更多)@Xakzi-实际涉及的逻辑仍然不清楚,如何确定哪个框需要更改颜色/可见性?这可能只会使其中一个文本框变暗,因为我希望用户选择的数字可以为尽可能多的文本框着色。因此,如果用户选择数字5,则文本框1到5应该着色darkred@Xakzi:编辑我的答案。哇,这么快的答案。我相信这可以。去研究它并记住/学习它。编辑它以供将来使用。对于有限的逻辑很抱歉。但是这样做的代码量会少很多。我将尝试一些与此相关的事情,以及Tim Schmelter的评论,看看我能用它做些什么。另外,使用
标记
专业perty作为寻找适当文本框的控制器nice@Ham3d-我不同意,因为这可能很费劲,而且容易出错,通过向面板添加所需的控件,这应该意味着您永远不需要再接触此逻辑。可能还有一些其他文本框根本不应该更改,但它们位于同一个文本框中panel@Ham3d-但是正如我回答的第一句话所说,他们不应该这样。