替换复杂的if else语句

时间:2016-10-08 21:37:43

标签: c# asp.net methods

我正在寻找一种干净有效的方法来实现这一目标(见图)。我想并排堆叠不同的按钮,具体取决于它们是否可见。我从使用if else语句开始,但这种方式很快就变得非常复杂和无效。

enter image description here

  • 案例1:只能看到一个按钮。 Align是中心。
  • 案例2:显示另一个按钮。两个按钮可见。
  • 案例3:显示OFF按钮。可以看到三个按钮。
  • 案例4:隐藏并关闭。 OFF是中心。
  • 案例5:第四个新按钮被添加到堆栈/页面。

    //Buttons
    private int startX { get; set; }
    private int width { get; set; }
    private int gap { get; set; }   
    
    private Boolean showOnBtn { get; set; }
    private Boolean showOffBtn { get; set; }
    private Boolean showCloseBtn { get; set; }
    
    public Buttons(int startX, int width, int gap)
    {
        this.startX = startX;
        this.width = width;
        this.gap = gap;
    }
    

我的if else尝试示例:

        //Page
        width = 600px;

        Button onBtn = new Button();

        Private void Update(){

        if (showOnBtn){

        onBtn.startX = 242;
        onBtn.width = 116;
        onBtn.gap = 0;

        if (showOffBtn || showCloseBtn) {

        onBtn.startX = 126;
        onBtn.width = 116;
        onBtn.gap = 113;
        etc etc…

        }
    }
}

2 个答案:

答案 0 :(得分:3)

在摘要中,您必须有五个完全不同的面板。

软件工程中的基本模式是:

  • 如果你必须“只有一个”,

  • 有一个例程,只关闭所有这些

  • 然后 只需打开 上的那个。

换句话说,“每次都关闭它们”,然后打开一个新想要的那个。不要试图“打开和关闭”等等。

摘要代码:

function TurnAllOff()
 {
 for i = 1 ... 5 Buttons[i].Hide();
 }

function ShowThisOne(int i)
 {
 TurnAllOff()
 Buttons[i].Show()
 }

如果您在Unity,www或其他任何地方工作,我完全不知道。但是你必须准确地使用上面的代码(只用你的本地语法)。

这就是它的全部。在您的情况下, 无法 概括布局。

为五个不同的按钮系统提供 五种不同的 完美布局。

使用上面的模式随时选择一个。

答案 1 :(得分:2)

您可以设置一个开关案例:

switch (caseDecider)
        {
            //ON/OFF
            case 1:
                //set UI elements to apropriate states here
                break;
            //ON/CLOSE//OFF
            case 2:
                //set UI elements to apropriate states here
                break;
            //OFF
            case 3:
                //set UI elements to apropriate states here
                break;
            //ON/CLOSE/OFF/NEW
            case 4:
                //set UI elements to apropriate states here
                break;
            //ON
            default:
                //set UI elements to apropriate states here
                break;
        }

您只需要确定设置“caseDecider”变量的位置,以及放置开关的位置。由于可读性,灵活性和需要较少的输入,开关通常比if / else更好。

编辑:如果您想简化设置5个状态中的每一个,请编写一个设置每个状态的函数。类似的东西:

private void setState1()
        {
                onBtn.startX = 242;
                onBtn.width = 116;
                onBtn.gap = 0;
        }

每个州。然后,只要您想设置该状态,就可以调用该函数。