Perić Željko Ответов: 2

Как изменить полный графический интерфейс во время выполнения


Привет,
Это вопрос об изменении графического интерфейса приложения во время выполнения.

Есть два приложения windows form с одинаковыми элементами управления, одинаковым программным кодом и только одним отличием-элементы управления расположены по-разному. Интерфейс отличается.

Если рассматривать программный код , то существует только разница между двумя классами MainForm.Designer.cs.

Мне интересно, как использовать только одно приложение, которое будет загружать выбранный класс MainForm.Designer.cs во время выполнения и использовать его для изменения графического интерфейса приложения.

Разве такое возможно ?


Всего наилучшего,
Желько Перич

Что я уже пробовал:

С тех пор я не знаю как, я ничего не пробовал.

Maciej Los

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

Perić Željko

Я хочу запустить программу и по выбранной опции от пользователя программы переставить все элементы управления, используемые в программе. Возможно ли это путем загрузки и вызова класса MainForm.designer.cs, который используется для другой программы.

Maciej Los

Хорошо, мы ближе к решению вашей проблемы... Итак, вы хотите разрешить пользователю изменять представление.
Вы когда-нибудь слышали об этом? Модель-Вид-Презентатор узор?

2 Ответов

Рейтинг:
20

OriginalGriff

"Форма запуска" создается строкой в файле program.cs:

static class Program
    {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
        {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new frmMain());  // <<-- This sets the startup app
        }
    }
Так что было бы нетрудно просто изменить форму там и запустить приложение - это может быть переключатель командной строки или что-то еще.

Другой подход заключается в том, чтобы фактически изменить элементы управления, которые вы создаете / выполняете, что технически возможно - они встроены в ваш файл Form.designer.cs, поэтому было бы нетрудно получить его, чтобы выбрать "set A" или "set B", но на самом деле это Пита, потому что это серьезно усложнило бы будущую разработку двух "форм".

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


Perić Željko

Спасибо за ответ.

OriginalGriff

Всегда пожалуйста!

Maciej Los

5ed!

Perić Željko

Мне удалось творить .dll-файл, содержащий класс MainForm.Designer.cs с небольшими изменениями в коде. Теперь я могу использовать его как любой .dll и вызвать метод InitializeComponent() из .dll, чтобы создать rearanged GUI для пользователя.

Рейтинг:
2

RickZeeland

В дополнение к превосходному ответу OriginalGriff, я также хотел бы упомянуть снятие шкур.
Хотя Winforms, как известно, трудно скинуть, вы можете использовать бесплатный Криптонский Инструментарий: Гитхаб - ComponentFactory/Криптон: Криптон обязанности и достижения комплектующих для .Чистая[^]

Простой пример Скининга Winforms см. В разделе: Новый скин для Ye Olde GroupBox[^]

Конечно, при использовании WPF есть больше возможностей для снятия кожи.


Maciej Los

5ed!