好的,所以我正在尝试清理我的代码,因为它是一个混乱,我有25个richtext框,我想将他们的.Visible变量放入一个数组并让一个for语句通过并使每个错误所以文本框没有显示我尝试过的东西没有用,我无法弄明白我的意思。
bool[] box = new bool[25];
box[0] = richTextBox1.Visible;
box[1] = richTextBox2.Visible;
box[2] = richTextBox3.Visible;
box[3] = richTextBox4.Visible;
box[4] = richTextBox5.Visible;
box[5] = richTextBox6.Visible;
box[6] = richTextBox7.Visible;
box[7] = richTextBox8.Visible;
box[5] = richTextBox6.Visible;
box[6] = richTextBox7.Visible;
box[7] = richTextBox8.Visible;
box[8] = richTextBox9.Visible;
box[9] = richTextBox10.Visible;
box[10] = richTextBox11.Visible;
box[11] = richTextBox12.Visible;
box[12] = richTextBox13.Visible;
box[13] = richTextBox14.Visible;
box[14] = richTextBox15.Visible;
box[15] = richTextBox16.Visible;
box[16] = richTextBox17.Visible;
box[17] = richTextBox18.Visible;
box[18] = richTextBox19.Visible;
box[19] = richTextBox20.Visible;
box[20] = richTextBox21.Visible;
box[21] = richTextBox22.Visible;
box[22] = richTextBox23.Visible;
box[23] = richTextBox24.Visible;
box[24] = richTextBox25.Visible;
for(int y = 0; y <25; y++)
{
box[y] = false;
}
答案 0 :(得分:11)
您可以更改数组中的bool
并期望它更改TextBoxes的Visible
状态。
您必须更改该属性。因此,您必须将这些控件存储在集合中或使用不同的方法:如果它们位于同一容器控件中(如Form
,GroupBox
,Panel
等),您可以使用Enumerable.OfType
。
例如:
var allRichTextBoxes = this.Controls.OfType<RichTextBox>()
.Where(txt => txt.Name.StartsWith("richTextBox"));
foreach(var rtb in allRichTextBoxes)
rtb.Visible = false;
答案 1 :(得分:4)
我认为,这就是你所需要的:
for(int y =0; y < box.Length; y++)
{
((RichTextBox)this.FindControl("richTextBox" + (y+1).ToString()))
.Visible = box[y];
}
答案 2 :(得分:2)
布尔值是值类型,因此在分配时:
box[0] = richTextBox1.Visible;
您只是复制布尔值,这完全独立于对象(由richTextBox1
引用)并且更改为不同的布尔值只会更改数组的内容,没有指向对象的链接改变它的财产。
最简单的方法 - 还有其他方法可能更适合但更复杂 - 是将对象引用存储在数组中并直接设置属性:
var boxes = new RichTextBox[...]
boxes[0] = richTextBox1;
...
for (int y = 0; y < boxes.Lengthl y++) {
boxes[y].Visible = false;
}
答案 3 :(得分:0)
TextBox.Visible
是一个属性,因此会返回值。因此,您的布尔数组也包含值。更改此值对您的文本框没有任何影响,因为它不再知道文本框的任何内容。
在C#中无法存储对值的引用,因此请尝试以下方法:
RichtTextBox[] box = new RichTextBox[25];
box[0] = richTextBox1;
box[1] = richTextBox2;
box[2] = richTextBox3;
box[3] = richTextBox4;
box[4] = richTextBox5;
// ...
for(int y = 0; y <25; y++)
{
box[y].Visible = false;
}
答案 4 :(得分:0)
将所有控件放在asp:Panel中然后更改panel.visible = false的可见性....为什么复杂化了?
答案 5 :(得分:0)
有时你无法绕过它,所以把它放在一个单独的方法中并一次性分配它们
private void SetVisibilityForAllTextBoxesTo(bool isVisible)
{
this.richTextBox1.Visible =
this.richTextBox2.Visible =
this.richTextBox3.Visible =
this.richTextBox4.Visible =
this.richTextBox5.Visible =
this.richTextBox6.Visible =
this.richTextBox7.Visible =
this.richTextBox8.Visible =
this.richTextBox6.Visible =
this.richTextBox7.Visible =
this.richTextBox8.Visible =
this.richTextBox9.Visible =
this.richTextBox10.Visible =
this.richTextBox11.Visible =
this.richTextBox12.Visible =
this.richTextBox13.Visible =
this.richTextBox14.Visible =
this.richTextBox15.Visible =
this.richTextBox16.Visible =
this.richTextBox17.Visible =
this.richTextBox18.Visible =
this.richTextBox19.Visible =
this.richTextBox20.Visible =
this.richTextBox21.Visible =
this.richTextBox22.Visible =
this.richTextBox23.Visible =
this.richTextBox24.Visible =
this.richTextBox25.Visible = isVisible;
}