c# - изменение внешнего вида формы моего окна

Я разрабатываю форму окна. Я хочу изменить внешний вид формы и ее элементов управления. Я смог использовать демо-версию Skincrafter, однако это значительно утяжелило приложение. Меня не устраивает то, насколько «тяжелым» он кажется при навигации по вкладкам, перемещении окна и т. д. Это довольно простая программа, и у меня нет этой проблемы, когда я не использую скинкрафтер. Когда он не используется, графический интерфейс очень отзывчив, и я хочу, чтобы он оставался таким.

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

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

Может ли кто-нибудь порекомендовать мне другой способ изменить внешний вид моих элементов управления/формы? Есть ли способ программно изменить внешний вид элементов управления и формы, не полагаясь на стороннее программное обеспечение для создания скинов?

Обратите внимание, что я не хочу, чтобы мои пользователи меняли скины. Я хочу применить один и все.

спасибо Стив

Редактировать: проект далек от завершения, поэтому я собираюсь дать WPF несколько хороших мыслей, поэтому я не закончу этим, когда у меня будет в 4 раза больше, чем сейчас. Я уже начал конвертировать, и это не должно быть большой проблемой. Найденный таймер и последовательный порт не могут быть удалены из панели инструментов, а таймер заменяется на dispatchtimer. Пока ничего страшного. Еще одна вещь, которая заставляет меня хотеть работать с WPF, заключается в том, что мне может понадобиться построить графики (графики), чтобы показать температуру в зависимости от времени. Я использую последовательный порт для связи с внешним USB-контроллером (виртуальный COM-порт), который считывает множество датчиков температуры и скорости вращения вентилятора. Я подозреваю, что графическое представление будет лучше с WPF. И последнее: речь идет только о цветах/шрифтах, но больше о внешнем виде кнопок, внешнем виде самого окна (формы границ). То, что я хотел сделать, было чем-то похожим на html и css. Я хочу иметь пользовательские метки, чтобы придать им вид «цифрового дисплея» для измерения температуры и скорости вращения вентилятора в реальном времени.

еще раз спасибо всем за оказанную помощь!


person user3617652    schedule 08.05.2014    source источник
comment
Вы можете взглянуть на наборы коммерческих элементов управления, таких как Telerik и DevExpress. Но если вас действительно беспокоит пользовательский интерфейс, я слышал, что лучше перейти на WPF. Это не невозможно в оконных формах, но, безусловно, сложнее.   -  person Areks    schedule 08.05.2014
comment
Я бы также посоветовал вам обратиться к третьим лицам для этого. Крайне маловероятно, что вы придумаете что-то лучшее за разумную задержку. Либо так, либо вообще отказаться от идеи снятия шкуры.   -  person Crono    schedule 08.05.2014
comment
Can anyone recommend me another way to change the appearance of my controls/form? – Вы ищете WPF. Это предпочтительная среда пользовательского интерфейса при создании настольных приложений Windows на основе .Net. winforms — действительно старая технология, которая не поддерживает какой-либо уровень насыщенности или настройки.   -  person Federico Berasategui    schedule 08.05.2014
comment
Спасибо за совет. Как и во многих небольших компаниях, у нас нет штатного программиста, и у нас нет бюджета на субподряд. Раньше я выполнял некоторую работу с winform, эта немного важнее, так как она будет использоваться конечными пользователями, в отличие от тех, которые я делал раньше, где я был единственным пользователем (лабораторное приложение). Мне интересно, насколько сложно будет перенести весь проект на WPF, но я посмотрю на это. Благодарность   -  person user3617652    schedule 08.05.2014
comment
Это почти полностью зависит от того, насколько хорошо вы разработали проект. Если вы следуете некоторым передовым методам и отделяете свою логику от пользовательского интерфейса, это должно быть довольно просто, поскольку вы можете повторно использовать другие слои.   -  person Areks    schedule 08.05.2014
comment
@ user3617652 перенос всего проекта в WPF, безусловно, будет менее проблематичным, чем бесконечный ад пыток и боли, связанный с настройкой внешнего вида winforms. Если вам действительно нужна настройка, ваш выбор — WPF. В противном случае вы можете просто оставить все как есть. Если вам нужно настроить конкретные визуально изолированные части вашего пользовательского интерфейса (например, определенный виджет или элемент управления), вы также можете использовать ElementHost и интегрировать содержимое WPF в winforms.   -  person Federico Berasategui    schedule 08.05.2014
comment
Я только что отредактировал свой вопрос. Я попробую WPF и посмотрю, к чему это меня приведет. Если я смогу реализовать графику проще, чем с помощью winforms (я делал это до использования внешней dll, что было хорошо для личного использования, но для распространения это может быть невозможно), тогда WPF определенно будет тем, что нужно!   -  person user3617652    schedule 09.05.2014


Ответы (1)


В далеком прошлом я добавлял легкое оформление к проектам WinForms, создавая подклассы готовых элементов управления (Label, TextBox и т. д.) и заставляя этот подкласс считывать конфигурацию внешнего вида (например, цвет, шрифт) из XML-файла ( можно также использовать app.config).

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

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

public MyLabel : Label
{
    MyLabel()
    {
        this.ForeColor = Colors.Blue;
    }
}

Затем везде, где у вас в настоящее время есть метка в вашем коде, используйте вместо нее MyLabel.

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

person Eric J.    schedule 08.05.2014
comment
Спасибо за совет. Как и во многих небольших компаниях, у нас нет штатного программиста, и у нас нет бюджета на субподряд. Раньше я выполнял некоторую работу с winform, эта немного важнее, так как она будет использоваться конечными пользователями, в отличие от тех, которые я делал раньше, где я был единственным пользователем (лабораторное приложение). Мне интересно, насколько сложно будет перенести весь проект на WPF, но я посмотрю на это. Благодарность - person user3617652; 08.05.2014
comment
Если это уже существующий проект и у вас нет штатного программиста, лучшим решением, вероятно, будет развитие WinForms. Я добавлю немного больше деталей о том, как создавать подклассы. Если вам нужно только улучшить внешний вид, а не сделать его гибким скином (например, пользователь может выбрать, какой скин), стратегия подкласса действительно проста. - person Eric J.; 08.05.2014
comment
Важно отметить, что идея настройки заключается не только в изменении цветов или свойств элементов пользовательского интерфейса, и что реальная настройка в winforms требует техники, называемой отрисовкой владельцем, которая действительно обременительна и утомительна. - person Federico Berasategui; 08.05.2014
comment
@HighCore: Конечно, но базовый вид «черный на сером» можно значительно улучшить с помощью доступных свойств. Цель OP — сделать это приложение немного лучше, чем внутренние, поскольку конечные клиенты увидят его в условиях ограниченных денег и опыта программирования. - person Eric J.; 08.05.2014
comment
Я отредактировал свой вопрос. Похоже, что WPF может быть лучшим способом, поскольку мои возможные потребности в графике и формах границ окна. Если я не смогу перенести свой проект на WPF, я, вероятно, в конечном итоге сделаю это! Спасибо - person user3617652; 09.05.2014