Как красиво оформить виндовс форму
Перейти к содержимому

Как красиво оформить виндовс форму

  • автор:

C# Как красиво прорабатывать интерфейс?

Здравствуйте! Мой вопрос в следующем: Какие есть инструменты, методики или библиотеки, которые позволят создавать красивый интерфейс на Visual Studio на C#? Допустим, на любом сайте для контента, который не помещается на странице, существует скрол, так вот как в интефейсе программы сделать такую же прокрутку контента? Не прокрутку текстовой области, а вообще на форме. У меня на Form1 есть и картинки и текст, которые не помещаются все на выделенную форму. Как же сделать так, чтобы это все было листалось вниз как на сайте?

P.s. Web form вряд ли мне подойдет, так как мне нужно полноценное настольное приложение, которое запустится с рабочего стола, а не при помощи браузера.

P.s.s. И все же повторюсь. Может есть библиотеки или статьи для подобной разработки? По сути у меня в программе будет просто напросто представлена текстовая, графическая и видео информация и мне ее нужно разместить так, как будто я пишу HTML страницу.

  • Вопрос задан более трёх лет назад
  • 1805 просмотров

1 комментарий

Средний 1 комментарий

Как красиво оформить внешний вид программы

Как оформить внешний вид программы согласно скриншоту
Помогите собрать дизайн 1 в 1 как на картинке а то у меня фигня какая то получается эмблема power.

Как красиво оформить форму?
подскажыте пожалуста, как красиво оформить форму, фон, кнопкы. или бросьте ссыдку!!

Как красиво оформить форму
http://delphiguru.xm6.ru/lessons/25-krasivoe-oformlenie-programm.html если у кого возникнут.

Как красиво оформить справку в программе?
Я сделал справку в программе через MainMenu,но выглядит это как-то не очень.Можно ли как-то.

136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699

По твоей теме: собственные контролы ( наследуешь и переделываешь их прорисовку.)
А так WPF и вроде красивые Metro — интерфейсы на WinForms.
Я лично делаю на стандартном WinForms, только использую прорисовку свою (обычно убираю рамку и ставлю свое изображение)

Эксперт .NET

17413 / 12809 / 3355
Регистрация: 17.09.2011
Сообщений: 21,087

irineyxxx, можно в формах делать свою отрисовку и подставлять битмапы, но видок будет словно топором вырублен.
Если хотите делать реально красивые интерфейсы — учите WPF и ставьте Microsoft Expression Blend — она специально заточена под разработку графических интерфейсов.
По WPF, кстати, могу посоветовать книжку: Mathew MacDonald, Pro WPF in C# 2010. Очень хорошая, сейчас сам ее читаю.

Как правильно определить правую границу формы?

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

if (PointToClient(p).X >= 0) 

Но когда я пытаюсь сделать так:

int w = ActiveForm.Size.Width; if (PointToClient(p).X 

элемент всё равно уходит за правую границу. Т. е. Size.Width — это не правая граница формы. В связи с этим вопрос: как определить правую границу?

Отслеживать
задан 8 окт 2016 в 5:21
1,767 16 16 серебряных знаков 33 33 бронзовых знака

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

В качестве ответа могу предложить простое, «в лоб», но всё же решение в виде SLN.

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

Демо для вопроса

using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Threading; namespace RightMargin < /// /// Description of MainForm. /// public partial class MainForm : Form < public bool MoveActive < get; set; >public int deltaX < get; set; >public int deltaY < get; set; >public MainForm() < InitializeComponent(); MoveActive = false; deltaX = 1; deltaY = 1; >void buttonCloseClick(object sender, EventArgs e) < MoveActive = false; Close(); >void ButtonStartClick(object sender, EventArgs e) < MoveActive = true; while (MoveActive) < int newX = boxPanel.Left + deltaX; int newY = boxPanel.Top + deltaY; int maxX = ActiveForm.ClientSize.Width - boxPanel.Size.Width - 1; int maxY = ActiveForm.ClientSize.Height - boxPanel.Size.Height - 1; //Проверка координат if (newX < 0) < newX = 0; deltaX = -deltaX; >if (newY < panelMenu.Size.Height) < newY = panelMenu.Size.Height; deltaY = -deltaY; >if (newX > maxX) < newX = maxX; deltaX = -deltaX; >if (newY > maxY) < newY = maxY; deltaY = -deltaY; >boxPanel.Left = newX; boxPanel.Top = newY; //Thread.Sleep(2); Application.DoEvents(); > > void ButtonStopClick(object sender, EventArgs e) < MoveActive = false; >> > 

Отслеживать
11.5k 8 8 золотых знаков 42 42 серебряных знака 69 69 бронзовых знаков
ответ дан 8 окт 2016 в 12:11
BlackWitcher BlackWitcher
2,756 14 14 серебряных знаков 33 33 бронзовых знака

не хорошо в код обработчика события пихать основной код приложения, к тому же в бесконечном цикле. Глюк есть — кнопка стоп срабатывает только по второму клику. Вместо Thread.Sleep , который у вас закоментирован, лучше было использовать таймер, кнопками его запускать и останавливать, а вызов отдельного метода перемещения панельки делать по событию таймера.

8 окт 2016 в 14:46

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

Поехали. Положение контрола на форме и формы на экране задается положением левого верхнего угла и свойством Control.Location (красная точка на рисунке ниже). Положение остальных углов может быть вычислено добавлением длины и/или ширины контрола, которые заданы в свойстве Control.Size , к координатам Control.Location .

введите сюда описание изображения

Таким образом, чтобы контрол всегда целиком оставался в границах родительского контрола (форма тоже контрол), значения координат Control.Location не должны выходить за границу зеленой области на рисунке. Размеры этой области несложно вычислить из размеров контрола и родительского контрола.

Остается учесть только один момент. У контрола может быть задан определенный стиль рамки, особенно это важно для формы. Свойство Control.Size задает внешние размеры контрола, поэтому если использовать их для определения доступной области рисования, то дочерний контрол будет попадать под рамку или шапку формы. Это не тот результат который хочется видеть. Для учета размеров оформления контрола, рамок, шапки и т.д., определено свойство Control.ClientSize , которое содержит актуальный размер области, доступной для отрисовки дочерних элементов (внимательно читаем подписи на рисунке).

#2 — Создание дизайна для окна авторизации

#2 - Создание дизайна для окна авторизации

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

Видеоурок

Полезные ссылки:

  • подборка цвета — color picker ;
  • иконки для приложений — iconfinder ;

При разработке дизайна всегда стоит подготавливать макет готовой программы. Такой макет можно создать в PhotoShop , Figma, Sketch или в любых других программах, которые отвечают за разработку дизайна. Имея готовый макет вам будет проще расставлять объекты, добавлять к ним цвета, устанавливать форму и производить другие манипуляции.

На основе WinForms можно создавать абсолютно любой дизайн программы. Пример программы:

Библиотеки

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

Несколько таких библиотек приведено ниже:

  • Специализированная библиотека Bunify ;
  • Фреймворк WPF ;
  • Xamarin Forms .

Создание дизайна

В основе своей, создание дизайна разбивается на несколько этапов:

  • Добавление объектов на главное окно;
  • Добавление стилей для объектов. Можно добавить стили не только стандартные, но и стили из различных библиотек;
  • Добавление обработчиков событий.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *