Изменение макета формы в C # - PullRequest
1 голос
/ 18 ноября 2010

Я работаю над программой, которая требует от пользователя выбрать файл, который он / она хочет открыть.

Существует около 3 различных файлов, из которых они могут выбирать, и каждый из этих файлов влияет на расположение кнопок, а также некоторые их атрибуты.

Проблема в том, что на данный момент у меня есть этот огромный список с:

label1.Visible = false;
label2.Visible = false;
form.size = etc.

Каждый файл затрагивает около 16 различных элементов управления, так что в общей сложности 48 возможных изменений.

Есть ли более быстрый / лучший способ организовать макет вашей программы?

Заранее спасибо.

Каркас: 3,5 Язык: C #

Приложение Windows Forms

Ответы [ 4 ]

5 голосов
/ 18 ноября 2010

Я бы предложил сгруппировать их в панели, а затем переключить видимость на панели.

2 голосов
/ 18 ноября 2010

Если вы создаете свое приложение с использованием WPF, вы можете использовать Visual State Manager, чтобы определить пользовательские состояния для окна и установить видимость элементов управления в соответствии с состоянием. Или вы можете привязать свойство видимости в элементах управления к свойству в ViewModel.

Для дальнейшего использования C # - язык; вам нужно указать, какую платформу вы используете для своего приложения.

1 голос
/ 18 ноября 2010

Брэндон предложил группировать с панелями, что может быть разумным решением, если ваши 16 элементов управления лежат в прямоугольной области. Другая форма группировки может быть достигнута путем предоставления группе элементов управления разумных имен и доступа к ним по их именам во время выполнения.

Я предполагаю, что вы используете Windows Forms. Например, вместо 16 строк кода, подобных этому

label_1_1.Visible = false;
label_1_2.Visible = false;
//...
label_1_16.Visible = false;

Вы добавляете эту функцию в форму

Control FindControl(string name)
{
    foreach (Control c in this.Controls)
    {
         if (c.Name == name)
         {
              return c;
         }
     }
     return null;
 }

и используйте его так:

 for(int i=1;i<=16++i)
     ((Label)FindControl("label_1_" + i)).Visible=false;

(вы, конечно, должны добавить проверку ошибок)

0 голосов
/ 18 ноября 2010

Я бы поместил каждый макет в свой собственный элемент управления Placeholder (чтобы все они были невидимыми в разметке) и добавил логику для отображения того, который вам нужен.

(Предполагается, что вы говорите о веб-формах).).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...