Integrate winforms-modern-buttons gradient paint for primary actions and clear (×) controls, align PharmaTrust startup theme, and add Material/gradient/button skill demo projects for comparison. Co-authored-by: Cursor <cursoragent@cursor.com>
206 lines
7.7 KiB
C#
206 lines
7.7 KiB
C#
using System;
|
||
using System.Drawing;
|
||
using System.Windows.Forms;
|
||
using ModernControls;
|
||
|
||
namespace Elfisa.GradientButtonDemo
|
||
{
|
||
internal sealed class GradientButtonDemoForm : Form
|
||
{
|
||
public GradientButtonDemoForm()
|
||
{
|
||
Text = "winforms-modern-buttons skill — демо";
|
||
Size = new Size(980, 700);
|
||
MinimumSize = new Size(860, 600);
|
||
StartPosition = FormStartPosition.CenterScreen;
|
||
BackColor = Color.FromArgb(245, 247, 250);
|
||
Font = new Font("Segoe UI", 10f);
|
||
|
||
var header = new Label
|
||
{
|
||
Text = "ModernGradientButton — градиент + тень + скругление (.NET Framework 4.7.2)",
|
||
Dock = DockStyle.Top,
|
||
Height = 52,
|
||
Padding = new Padding(24, 16, 24, 0),
|
||
Font = new Font("Segoe UI Semibold", 13f, FontStyle.Bold),
|
||
ForeColor = Color.FromArgb(30, 41, 59)
|
||
};
|
||
|
||
var scroll = new Panel
|
||
{
|
||
Dock = DockStyle.Fill,
|
||
AutoScroll = true,
|
||
Padding = new Padding(24, 8, 24, 24)
|
||
};
|
||
|
||
var layout = new TableLayoutPanel
|
||
{
|
||
Dock = DockStyle.Top,
|
||
AutoSize = true,
|
||
ColumnCount = 2,
|
||
Width = 900
|
||
};
|
||
layout.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 240));
|
||
layout.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
|
||
|
||
AddRow(layout, "Primary (skill)", PresetButton(ModernGradientButton.Preset.Primary, "Сохранить"));
|
||
AddRow(layout, "Success", PresetButton(ModernGradientButton.Preset.Success, "Подтвердить"));
|
||
AddRow(layout, "Danger", PresetButton(ModernGradientButton.Preset.Danger, "Удалить"));
|
||
AddRow(layout, "Neutral", PresetButton(ModernGradientButton.Preset.Neutral, "Отмена"));
|
||
|
||
AddRow(layout, "Кастом (оранжевый)", CustomOrangeButton());
|
||
AddRow(layout, "Pharma Trust — синяя", PharmaPrimaryButton());
|
||
AddRow(layout, "Крестик × у поиска", ClearSearchButton());
|
||
AddRow(layout, "Toolbar (мелкая)", ToolbarRow());
|
||
|
||
var note = new Label
|
||
{
|
||
AutoSize = true,
|
||
MaximumSize = new Size(860, 0),
|
||
Margin = new Padding(0, 20, 0, 0),
|
||
ForeColor = Color.FromArgb(100, 116, 139),
|
||
Text =
|
||
"Skill: winforms-modern-buttons · Класс ModernControls.ModernGradientButton\n" +
|
||
"Наведите и нажмите — видны hover/pressed. Тень: ShadowDepth, градиент: GradientTop/Bottom.\n" +
|
||
"Основное приложение ЭльФиСА пока на Elfisa.UI.ModernButton — это отдельное демо для сравнения."
|
||
};
|
||
layout.Controls.Add(note, 0, layout.RowCount);
|
||
layout.SetColumnSpan(note, 2);
|
||
|
||
scroll.Controls.Add(layout);
|
||
Controls.Add(scroll);
|
||
Controls.Add(header);
|
||
}
|
||
|
||
private static void AddRow(TableLayoutPanel layout, string title, Control content)
|
||
{
|
||
var row = layout.RowCount;
|
||
layout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
|
||
|
||
layout.Controls.Add(new Label
|
||
{
|
||
Text = title,
|
||
AutoSize = true,
|
||
Margin = new Padding(0, 18, 12, 8),
|
||
Font = new Font("Segoe UI Semibold", 10f, FontStyle.Bold),
|
||
ForeColor = Color.FromArgb(51, 65, 85)
|
||
}, 0, row);
|
||
|
||
content.Margin = new Padding(0, 14, 0, 4);
|
||
layout.Controls.Add(content, 1, row);
|
||
layout.RowCount++;
|
||
}
|
||
|
||
private static ModernGradientButton PresetButton(ModernGradientButton.Preset preset, string text)
|
||
{
|
||
var btn = new ModernGradientButton
|
||
{
|
||
Text = text,
|
||
Size = new Size(160, 48),
|
||
Margin = new Padding(0, 0, 12, 8)
|
||
};
|
||
btn.ApplyPreset(preset);
|
||
btn.Click += (_, __) => MessageBox.Show(text + " — клик!", "Демо", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||
return btn;
|
||
}
|
||
|
||
private static ModernGradientButton CustomOrangeButton()
|
||
{
|
||
return new ModernGradientButton
|
||
{
|
||
Text = "Свой стиль",
|
||
Size = new Size(180, 50),
|
||
CornerRadius = 20,
|
||
ShadowDepth = 6,
|
||
GradientTop = Color.FromArgb(255, 179, 71),
|
||
GradientBottom = Color.FromArgb(230, 126, 34),
|
||
HoverGradientTop = Color.FromArgb(255, 195, 110),
|
||
HoverGradientBottom = Color.FromArgb(245, 145, 50),
|
||
PressedGradientTop = Color.FromArgb(220, 120, 30),
|
||
PressedGradientBottom = Color.FromArgb(190, 100, 20)
|
||
};
|
||
}
|
||
|
||
private static ModernGradientButton PharmaPrimaryButton()
|
||
{
|
||
var btn = new ModernGradientButton
|
||
{
|
||
Text = "Сохранить заказ",
|
||
Size = new Size(190, 44),
|
||
CornerRadius = 6,
|
||
ShadowDepth = 4,
|
||
GradientTop = Color.FromArgb(14, 116, 181),
|
||
GradientBottom = Color.FromArgb(3, 105, 161),
|
||
HoverGradientTop = Color.FromArgb(37, 130, 195),
|
||
HoverGradientBottom = Color.FromArgb(7, 89, 133),
|
||
PressedGradientTop = Color.FromArgb(12, 74, 110),
|
||
PressedGradientBottom = Color.FromArgb(8, 60, 90)
|
||
};
|
||
return btn;
|
||
}
|
||
|
||
private static Control ClearSearchRow()
|
||
{
|
||
var panel = new FlowLayoutPanel { AutoSize = true, WrapContents = false };
|
||
|
||
var search = new TextBox
|
||
{
|
||
Text = "прокладки",
|
||
Width = 280,
|
||
Height = 32,
|
||
Font = new Font("Segoe UI", 10f),
|
||
Margin = new Padding(0, 8, 8, 0)
|
||
};
|
||
|
||
var clear = new ModernGradientButton
|
||
{
|
||
Text = "×",
|
||
Size = new Size(36, 36),
|
||
CornerRadius = 6,
|
||
ShadowDepth = 3,
|
||
Font = new Font("Segoe UI Semibold", 13f, FontStyle.Bold),
|
||
Margin = new Padding(0, 6, 0, 0)
|
||
};
|
||
clear.ApplyPreset(ModernGradientButton.Preset.Danger);
|
||
clear.Click += (_, __) => search.Clear();
|
||
|
||
panel.Controls.Add(search);
|
||
panel.Controls.Add(clear);
|
||
return panel;
|
||
}
|
||
|
||
private static Control ClearSearchButton()
|
||
{
|
||
return ClearSearchRow();
|
||
}
|
||
|
||
private static Control ToolbarRow()
|
||
{
|
||
var panel = new FlowLayoutPanel { AutoSize = true };
|
||
|
||
var small = new ModernGradientButton
|
||
{
|
||
Text = "×",
|
||
Size = new Size(32, 32),
|
||
CornerRadius = 5,
|
||
ShadowDepth = 2,
|
||
Font = new Font("Segoe UI", 11f, FontStyle.Bold)
|
||
};
|
||
small.ApplyPreset(ModernGradientButton.Preset.Danger);
|
||
|
||
var neutral = new ModernGradientButton
|
||
{
|
||
Text = "Фильтр",
|
||
Size = new Size(100, 34),
|
||
CornerRadius = 8,
|
||
ShadowDepth = 3
|
||
};
|
||
neutral.ApplyPreset(ModernGradientButton.Preset.Neutral);
|
||
|
||
panel.Controls.Add(small);
|
||
panel.Controls.Add(neutral);
|
||
return panel;
|
||
}
|
||
}
|
||
}
|