我正在寻找一种干净有效的方法来实现这一目标(见图)。我想并排堆叠不同的按钮,具体取决于它们是否可见。我从使用if else语句开始,但这种方式很快就变得非常复杂和无效。
案例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…
}
}
}
答案 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;
}
每个州。然后,只要您想设置该状态,就可以调用该函数。