2016-10-08 3 views
-1

Я ищу чистый и эффективный способ выполнить это (см. Рисунок). Я хочу складывать разные кнопки бок о бок в зависимости от того, видны они или нет. Я начал с использования if else, но этот способ сделать это быстро стал очень сложным и неэффективным.Заменить сложный оператор if else

enter image description here

  • Случай 1: Только одна кнопка видна. Выровнять по центру.
  • Корпус 2: отображается другая кнопка. Две кнопки видны.
  • Корпус 3: Отображение кнопки ВЫКЛ. Доступны три кнопки.
  • Дело 4: Скрытие и закрытие. ВЫКЛ - центр.
  • Дело 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; 
    } 
    

Пример моей, если еще попытка:

 //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… 

     } 
    } 
} 
+1

Я даже не знаю, если это Интернет или что. Но для такого ad-hoc UX просто просто есть ** пять совершенно разных панелей ** - ваши дизайнеры могут проектировать каждую панель идеально по своему желанию - и просто прокручивать их. – Fattie

+0

Что вы нацеливаете: Winforms, WPF, ASP ..? __Always__ правильно помечайте свой вопрос! – TaW

+0

@ Joe Blow Спасибо. Это хорошая идея – kvambaam

ответ

3

Реферат, вы должны иметь пять совершенно разных панелей.

базовый образец в программной инженерии является:

  • если у вас есть, чтобы включить «только один один»,

  • вы есть процедура, которая просто превращает все из них от,

  • , а затем просто поверните один на.

Другими словами, «каждый раз отключайте их, каждый раз» и просто включайте одно новое. Не пытайтесь «включить некоторые включения и выключения» и т.д.

Аннотация код:

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

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

У меня совершенно нет подсказки, если вы работаете в Unity, в WWW, или любой другой.Но вы должны будете иметь точно указанный код (только в вашем локальном синтаксисе).

Это все, что нужно. Вы не может обобщить расположение, в вашем случае.

У пять разных отличные макеты для пяти различных систем кнопок.

Используйте шаблон выше, чтобы выбрать его в любое время.

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 из-за удобочитаемости, гибкости и меньшего набора текста.

EDIT: если вы хотите упростить настройку каждого из пяти состояний, напишите функцию, которая устанавливает каждое состояние. Что-то вроде:

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

для каждого штата. Затем вы просто вызываете эту функцию, когда хотите установить это состояние.

+2

Вам не нужно это делать. Просто запустите 'ShowThisOne (i)'. переключатель редко является хорошей конструкцией, это просто означает, что вы недостаточно обобщены. – Fattie

Смежные вопросы