如何在设置控件可见性时消除代码重复?

时间:2011-05-29 04:23:13

标签: c#

我有4个文本框,我写了4个函数,在每个函数中我想要一个文本框可见而其他文件框是真的。

function1()
{
    Txtbox1.visible=true;
    Txtbox2.visble=false;
    Txtbox3.visible=false;
    TxtBox4.visible=false;
}

同样我写了3个函数,使其他文本框的可见性为true。如何进行代码优化c#,Asp.net

3 个答案:

答案 0 :(得分:4)

设置TextBox数组。如

TextBox[] textboxes = { TxtBox1, TxtBox2, TxtBox3, TxtBox4 }; 

然后你可以编写一个函数来设置索引的可见性。

void SetVisibility(int index)
{
    // do index validation 

    textboxes[index].Visible = true;
    for (int i = 0; i < textboxes.Length; i++)
    {
        if (i != index) textboxes[i].Visible = false;
    }
}

现在,您可以拨打function1(), function()2, // etc.

,而不是拨打SetVisibility(0), SetVisibility(1)

答案 1 :(得分:4)

编写一个函数,将所有4个控件设置为false,然后将所需的控件(作为参数传递)设置为true:

private void ShowTextBox(TextBox target)
{
    Txtbox1.Visible = false;
    Txtbox2.Visible = false;
    Txtbox3.Visible = false;
    Txtbox4.Visible = false;
    target.Visible = true;
}

然后调用要在文本框实例中传递的函数:

ShowTextBox(Txtbox1);

答案 2 :(得分:0)

与其他人类似,您也可以使用LINQ以不同的方式执行此操作。

TextBox[] allTextBoxes = { TxtBox1, TxtBox2, TxtBox3, TxtBox4 };

void SetVisibility(TextBox visibleTextBox)
{
    allTextBoxes.Except(new TextBox[] { visibleTextBox })
                .ToList()
                .ForEach(t => t.Visible = false);

    visibleTextBox.Visible = true;
}

用法:

SetVisibility(Txtbox1);

你也可以这样做,这样你就可以设置多个(或者没有,所以都隐藏)同时可见(还有更多的方法可以做到这一点):

void SetVisibility1(params TextBox[] visibleTextBoxes)
{
    var visibleList = visibleTextBoxes.ToList();

    foreach (TextBox t in allTextBoxes)
    {
        t.Visible = visibleList.Contains(t);
    }
}

void SetVisibility2(params TextBox[] visibleTextBoxes)
{
    allTextBoxes.Except(visibleTextBoxes).ToList().ForEach(t => t.Visible = false);
    visibleTextBoxes.ToList().ForEach(t => t.Visible = true);
}

void SetVisibility3(params TextBox[] visibleTextBoxes)
{
    var visibleList = visibleTextBoxes.ToList();
    allTextBoxes.ToList().ForEach(t => t.Visible = visibleList.Contains(t));
}