Как создать библиотеку DLL со стандартным макетом формы для использования в нескольких формах? - PullRequest
0 голосов
/ 06 августа 2020

Я обыскал много мест, но не получил ответа. Я хочу создать стандартную форму окна с предопределенным макетом на нем, например: окно без полей, панель с некоторым кодом, чтобы иметь возможность перемещать окно, кнопки закрытия и минимизации и т. Д. c.

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

Если бы кто-нибудь мог, пожалуйста, объясните мне пошагово о том, как это сделать, создать, импортировать и использовать DLL, я был бы очень благодарен.

Edit: Извините, это WinForm. Я хочу иметь возможность использовать этот стандартный макет WinForm вне моего решения в других проектах. Основное решение будет иметь только стандартный макет WinForm, который я создал, и ничего больше. Другие проекты должны иметь возможность вставлять свои компоненты, такие как кнопки и панели, внутрь стандартного макета WinForm. Думаю, мне, возможно, придется использовать пакет NuGet вместо DLL.

1 Ответ

0 голосов
/ 19 августа 2020

Есть много способов сделать то, что вам нужно. Но прежде всего вам нужно провести некоторый анализ и дизайн. Узнайте, какие макеты и элементы управления необходимы, что изменится и каким образом. Определите возможные режимы или шаблоны для реализации в форме. Помогут рисунки на бумаге. Начните с одного проекта, чтобы все было очень просто, а когда он заработает, включите go с помощью пакета DLL или NuGet. Я попытаюсь объяснить очень быстрый и грязный пример с множеством предположений.

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

  • GUI. Элементы управления добавляются, скрываются, изменяются или перемещаются по контейнерам по мере необходимости.
  • Код. Обработчики событий, частные методы и весь код для реализации того, что должен делать режим.

Каждый режим должен иметь единственный метод, выполняющий все необходимые изменения в GUI и коде.

Должно быть создано перечисление (на уровне пространства имен) со всеми необходимыми именами режимов.

public enum EditFormMode { Default, CreateClient, EditClient }

Конструктор формы должен получить один аргумент типа перечисления. И переключатель отправит выполнение методу.

{
     public FormEditConfig(EditFormMode mode)
        {
            InitializeComponent();

            switch (mode)
            {
             case EditFormMode.Default:
                    CreateDefaultMode();
                    break;
                    
                case EditFormMode.CreateClient:
                    CreateClientMode();
                    break;
                    
                case EditFormMode.EditClient:
                    CreateEditClientMode();
                    break;
            }
        }   
        
        private void CreateDefaultMode()
        { // do default stuff }
        
        private void CreateClientMode()
        { // do create client stuff }
        
        private void CreateEditClientMode()
        { // do edit client stuff }
}

И код для создания формы:

private FormEditConfig _theForm ;

_theForm = new FormEditConfig(EditFormMode.CreateClient);

Это основной механизм c. Как получить данные из формы в вызывающий код, очень зависит от конкретной реализации.

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

...