Вступление: Часто встречаются приложения которые не блестят особым дизайном UI, так же в них нет вкуса и все в сером цвете. С помощью не хитрых действий можно сделать современное приложение которая не будет уступать монстру WPF, к которому очень не легко сразу научится писать ПО, эта статья скорей для тех кто пишет под WinForms и боится начать WPF, так как они вроде бы похожи но все же отличаются сложностью и крутостью.
Итак. Для простого примера создадим наш собственный браузер на движке webkit с помощью платформы .Net Framework на языке программировании c#
Глава 1: Цвет залог успешной дружелюбности, чем он приятней тем лучше, и кстати белый цвета тоже не плохо смотрятся
Свойства формы: FrameBorder=none, BackColor=white

Глава 2: Кнопки играют не маловажную роль в интерфейсе любой ПО, главное их правильное расположение, размер, текст и цвет,
Для этого создадим UserControl

Глава 3: Не много функциональности для формы
Заключение: Не смотря на многообещающий WPF, Winforms еще жив, пока и не мере в Казахстане и России, и во многих странах, да и вообще везде, не мало людей кто пишут. Путем не многих модернизации можно добиться схожих результатов как и в WPF.
Еще один пример

Итак. Для простого примера создадим наш собственный браузер на движке webkit с помощью платформы .Net Framework на языке программировании c#
Глава 1: Цвет залог успешной дружелюбности, чем он приятней тем лучше, и кстати белый цвета тоже не плохо смотрятся
Свойства формы: FrameBorder=none, BackColor=white

Глава 2: Кнопки играют не маловажную роль в интерфейсе любой ПО, главное их правильное расположение, размер, текст и цвет,
Для этого создадим UserControl
using System;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace habr
{
public partial class btn : Button//UserControl
{
public enum ButtonType
{
GoBack,
Home,
GoForward,
Refresh,
Search,
Close,
Minimize
}
public btn()
{
InitializeComponent();
}
private Color _OnMouseEnterColor = Color.Blue;
private Color _OnMouseClickColor = Color.BlueViolet;
private Color _MixedColor = Color.CadetBlue;
private byte _Transparency1 = 64;
private byte _Transparency2 = 64;
private byte _AngleOfTransparency = 90;
private float _Resizer = 1.05f;
private ButtonType _ButtonType;
private bool IsOver;
private bool IsDown;
private Point _initLocation;
private Font _initFontSize;
private Point _tempLocation;
private Size _tempSize;
public Color OnMouseEnterColor { get { return _OnMouseEnterColor; } set { _OnMouseEnterColor = value; Invalidate(); } }
public Color OnMouseClickColor { get { return _OnMouseClickColor; } set { _OnMouseClickColor = value; Invalidate(); } }
public Color MixedColor { get { return _MixedColor; } set { _MixedColor = value; Invalidate(); } }
public byte Transparency1 { get { return _Transparency1; } set { _Transparency1 = value; Invalidate(); } }
public byte Transparency2 { get { return _Transparency2; } set { _Transparency2 = value; Invalidate(); } }
public byte AngleOfTransparency { get { return _AngleOfTransparency; } set { _AngleOfTransparency = value; Invalidate(); } }
public float Resizer { get { return _Resizer; } set { _Resizer = value; Invalidate(); } }
public ButtonType ButtonTypeThumb { get { return _ButtonType; } set { _ButtonType = value; Invalidate(); } }
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
IsOver = true;
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
IsOver = false;
}
protected override void OnMouseDown(MouseEventArgs mevent) //Эффект увеличивания / уменьшения
{
base.OnMouseDown(mevent);
_initLocation = Location;
_tempLocation = new Point(Location.X + Width / 2, Location.Y + Height / 2);
_tempSize = Size;
Size = new Size((int)(Width / _Resizer), (int)(Height / _Resizer));
Location = new Point(_tempLocation.X - Size.Width / 2, _tempLocation.Y - Size.Height / 2);
_initFontSize = Font;
Font = new Font(Font.FontFamily, Font.Size / _Resizer);
IsDown = true;
}
protected override void OnMouseUp(MouseEventArgs mevent)
{
base.OnMouseUp(mevent);
Location = _initLocation;
Size = _tempSize;
Font = _initFontSize;
IsDown = false;
}
protected override void OnPaint(PaintEventArgs pevent) //отрисовка иконки ИСПОЛЬЗОВАТЬ ШРИФТ SEGOE UI SYMBOL. Который позволяет отрисовывать такие жамечательные картинки
{
base.OnPaint(pevent);
if (_ButtonType == ButtonType.GoBack) Text = "\ue096";
if (_ButtonType == ButtonType.GoForward) Text = "\ue097";
if (_ButtonType == ButtonType.Home) Text = "\ue10f";
if (_ButtonType == ButtonType.Refresh) Text = "\ue149";
if (_ButtonType == ButtonType.Search) Text = "\ue11a";
if (_ButtonType == ButtonType.Close) Text = "\ue10a";
if (_ButtonType == ButtonType.Minimize) Text = "\ue108";
if (IsOver)
{
if (IsDown)
{
Color c1 = Color.FromArgb
(_Transparency1, _OnMouseClickColor);
Color c2 = Color.FromArgb
(_Transparency2, _MixedColor);
Brush b = new System.Drawing.Drawing2D.LinearGradientBrush
(ClientRectangle, c1, c2, _AngleOfTransparency);
pevent.Graphics.FillRectangle(b, ClientRectangle);
b.Dispose();
}
else
{
Color c1 = Color.FromArgb
(_Transparency1, _OnMouseEnterColor);
Color c2 = Color.FromArgb
(_Transparency2, _MixedColor);
Brush b = new System.Drawing.Drawing2D.LinearGradientBrush
(ClientRectangle, c1, c2, _AngleOfTransparency);
pevent.Graphics.FillRectangle(b, ClientRectangle);
b.Dispose();
}
}
}
}
}

Глава 3: Не много функциональности для формы
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private bool IsDown;
private Point Origin;
private void btn6_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void btn7_Click(object sender, EventArgs e)
{
WindowState = FormWindowState.Minimized;
}
private void panel4_MouseDown(object sender, MouseEventArgs e)
{
IsDown = true;
Origin = new Point(e.X, e.Y);
}
private void panel4_MouseUp(object sender, MouseEventArgs e)
{
IsDown = false;
Location = new Point(Location.X - Origin.X + e.X, Location.Y - Origin.Y + e.Y);
}
private void panel4_MouseMove(object sender, MouseEventArgs e)
{
if (IsDown) Location = new Point(Location.X - Origin.X + e.X, Location.Y - Origin.Y + e.Y);
}
private void panel1_DoubleClick(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Maximized) WindowState = FormWindowState.Normal;
else WindowState = FormWindowState.Maximized;
}
}
Заключение: Не смотря на многообещающий WPF, Winforms еще жив, пока и не мере в Казахстане и России, и во многих странах, да и вообще везде, не мало людей кто пишут. Путем не многих модернизации можно добиться схожих результатов как и в WPF.
Еще один пример
