Сборка C # .NET Windows приложения с несколькими представлениями

Я переписываю старое приложение и использую это как хорошую возможность попробовать разработки на C # и .NET (я обычно делаю много плагинов в C).

Приложение в основном таймер сбора данных. Он имеет начальный вид с кнопкой, чтобы начать измерение. Во время измерения приложение имеет пять различных представлений в зависимости от того, какую информацию хочет видеть пользователь.

Как лучше переключаться между представлениями? От начала до бега? Между бегущими взглядами?

Идеи:

  • Используйте одну форму и скрыть и показать элементы управления
  • Используйте одну стартовую форму, а затем форму с TabControl
  • Используйте шесть отдельных форм
24.08.2008 16:31:25
5 ОТВЕТОВ
РЕШЕНИЕ

Создание группы накладных панелей - кошмар времени разработки.

Я бы предложил использовать элемент управления вкладками с каждым «представлением» на отдельной вкладке, а затем выбирать правильную вкладку во время выполнения. Вы можете избежать отображения заголовков вкладок, добавив что-то вроде этого в событие Load вашей формы:

tabControl1.Top = tabControl1.Top - tabControl1.ItemSize.Height;
tabControl1.Height = tabControl1.Height + tabControl1.ItemSize.Height;
tabControl1.Region = new Region(new RectangleF(tabPage1.Left, tabPage1.Top, tabPage1.Width, tabPage1.Height + tabControl1.ItemSize.Height));
8
25.08.2008 00:43:07
Если tabControl «заливка» закреплена внутри другого контейнера, и если вы измените размер этого контейнера, элемент управления tab больше не заполняет стыковки с родительским контейнером, если вы используете вышеуказанный код. Просто к вашему сведению. Спасибо
SomethingBetter 6.07.2011 07:38:47

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

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

Метод, который я часто использую, заключается в том, чтобы предварительно настроить все мои элементы управления на отдельных элементах «Панели», а затем показать и скрыть эти панели по мере необходимости. Элемент управления «Панель» в основном представляет собой контейнер элемента управления ... вы можете перемещать панель, и все элементы управления на ней перемещаются относительно. И если вы показываете или скрываете панель, элементы управления на ней делают то же самое. Они отлично подходят для подобных ситуаций.

3
24.08.2008 16:42:17

Метод, который я часто использую, заключается в том, чтобы предварительно настроить все мои элементы управления на отдельных элементах «Панели», а затем показать и скрыть эти панели по мере необходимости.

Вместо того, чтобы делать каждое представление панелью в пределах одной формы, вы можете сделать каждое представление UserControl. Затем создайте отдельную форму и напишите код, чтобы создать и отобразить правильный пользовательский элемент управления в форме и переключаться с одного на другое. Это было бы проще поддерживать, потому что у вас будет отдельный класс для каждого представления вместо одного класса Form с 6 панелями, каждая со своими собственными элементами управления, что кажется трудным и подверженным ошибкам.

1
24.08.2008 23:51:51
0
23.09.2008 15:57:56

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

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

Я предпочитаю это, потому что вы можете затем повторно использовать ваши представления, например, если вы хотите открыть представление на вкладке, вы можете закрепить свои пользовательские элементы управления на страницах вкладок ... или даже наследовать от tabpage вместо usercontrol, чтобы сделать вещи более общими.

public partial class MainForm : Form
{
    public enum FormViews
    {
        A, B
    }
    private MyViewA viewA; //user control with view a on it 
    private MyViewB viewB; //user control with view b on it

    private FormViews _formView;
    public FormViews FormView
    {
        get
        {
            return _formView;
        }
        set
        {
            _formView = value;
            OnFormViewChanged(_formView);
        }
    }
    protected virtual void OnFormViewChanged(FormViews view)
    {
        //contentPanel is just a System.Windows.Forms.Panel docked to fill the form
        switch (view)
        {
            case FormViews.A:
                if (viewA != null) viewA = new MyViewA();
                //extension method, you could use a static function.
                this.contentPanel.DockControl(viewA); 
                break;
            case FormViews.B:
                if (viewB != null) viewB = new MyViewB();
                this.contentPanel.DockControl(viewB);
                break;
        }
    }

    public MainForm()
    {

        InitializeComponent();
        FormView = FormViews.A; //simply change views like this
    }
}

public static class PanelExtensions
{
    public static void DockControl(this Panel thisControl, Control controlToDock)
    {
        thisControl.Controls.Clear();
        thisControl.Controls.Add(controlToDock);
        controlToDock.Dock = DockStyle.Fill;
    }
}
7
23.09.2008 16:43:58