C# 更改多个文本框';用户输入的背景色
我有多达10个文本框,我想让它们改变用户输入的背景色 目前我使用的代码是: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;
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-但是正如我回答的第一句话所说,他们不应该这样。