为多个控件分配可见性的最佳方法是什么

时间:2014-04-01 08:10:03

标签: c# arrays boolean

好的,所以我正在尝试清理我的代码,因为它是一个混乱,我有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;
  }

6 个答案:

答案 0 :(得分:11)

您可以更改数组中的bool并期望它更改TextBoxes的Visible状态。

您必须更改该属性。因此,您必须将这些控件存储在集合中或使用不同的方法:如果它们位于同一容器控件中(如FormGroupBoxPanel等),您可以使用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;
}