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

本文关键字:代码 设置 控件 可见性 | 更新日期: 2023-09-27 17:58:05

我有4个文本框,我写了4个函数,每个函数中我希望一个文本框可见true,另一个为false。

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

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

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

设置一个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;
    }
}

因此,现在您可以调用SetVisibility(0), SetVisibility(1),而不是调用function1(), function()2, // etc.

编写一个函数,将所有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);

与其他类似,您也可以使用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));
}