elfisa-pharmacy/src/Elfisa.GradientButtonDemo/GradientButtonDemoForm.cs
Magomed 1ccb2b33cf Apply skill gradient Primary/Danger buttons to Elfisa.UI and add button demos.
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>
2026-07-14 14:27:31 +03:00

206 lines
7.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}