Сведения о вопросе

Ислам

04:25, 9th August, 2020

Теги

c#   .net   windows    

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

Просмотров: 410   Ответов: 5

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

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

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

Помыслы:

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



  Сведения об ответе

padenie

02:05, 6th August, 2020

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

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

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));


  Сведения об ответе

lats

09:56, 5th August, 2020

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

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

я предпочитаю это, потому что вы можете повторно использовать свои представления, например, если вы хотите открыть представление на вкладке, вы можете закрепить свои пользовательские элементы управления внутри страниц вкладок.. или даже унаследовать от новые, вместо объекта 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;
    }
}


  Сведения об ответе

DO__IT

01:57, 3rd August, 2020

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

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

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


  Сведения об ответе

Chhiki

12:41, 8th August, 2020

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

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


  Сведения об ответе

ASER

23:08, 18th August, 2020

Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться