Сборка C # .NET Windows приложения с несколькими представлениями - PullRequest
9 голосов
/ 24 августа 2008

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

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

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

Идеи:

  • Используйте одну форму и скрывайте и отображайте элементы управления
  • Используйте одну стартовую форму, а затем форму с TabControl
  • Используйте шесть отдельных форм

Ответы [ 5 ]

7 голосов
/ 23 сентября 2008

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

Затем, когда я хочу переключиться между просмотром, вы прикрепляете его к 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 голосов
/ 25 августа 2008

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

Я бы предложил использовать элемент управления вкладками с каждым «представлением» на отдельной вкладке, а затем выбирать правильную вкладку во время выполнения. Вы можете избежать отображения заголовков вкладок, добавив что-то вроде этого в событие 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));
3 голосов
/ 24 августа 2008

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

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

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

1 голос
/ 25 августа 2008

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

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

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