AlfaToad.CustomControls
4.2.6
See the version list below for details.
dotnet add package AlfaToad.CustomControls --version 4.2.6
NuGet\Install-Package AlfaToad.CustomControls -Version 4.2.6
<PackageReference Include="AlfaToad.CustomControls" Version="4.2.6" />
<PackageVersion Include="AlfaToad.CustomControls" Version="4.2.6" />
<PackageReference Include="AlfaToad.CustomControls" />
paket add AlfaToad.CustomControls --version 4.2.6
#r "nuget: AlfaToad.CustomControls, 4.2.6"
#:package AlfaToad.CustomControls@4.2.6
#addin nuget:?package=AlfaToad.CustomControls&version=4.2.6
#tool nuget:?package=AlfaToad.CustomControls&version=4.2.6
AlfaToad.CustomControls
Библиотека пользовательских контролов для Windows Forms (.NET Framework 4.8 и .NET 8).
Пакет: NuGet — AlfaToad.CustomControls
Компоненты
| Контрол | Назначение |
|---|---|
ScrollableDetailPanel |
Прокручиваемый список строк с фото, полями товара и скидкой |
ScrollableOrderPanel |
Прокручиваемый список строк заказа |
BoundDataGridView |
Таблица с привязкой к DataSet и подсветкой столбца |
Установка
dotnet add package AlfaToad.CustomControls --version 4.2.1
<PackageReference Include="AlfaToad.CustomControls" Version="4.2.1" />
ScrollableDetailPanel — настраиваемые свойства
Поля данных (имена столбцов в DataTable)
| Поле на экране | Свойство | Значение по умолчанию |
|---|---|---|
| Фото | ImageField |
Фото |
| Категория | CategoryField |
Категория товара |
| Наименование | NameField |
Наименование товара |
| Описание | DescriptionField |
Описание товара |
| Производитель | ManufacturerField |
Производитель |
| Поставщик | SupplierField |
Поставщик |
| Цена | PriceField |
Цена |
| Единица измерения | UnitField |
Единица измерения |
| Количество на складе | StockField |
Кол-во на складе |
| Скидка | DiscountField |
Действующая скидка |
Подписи на экране
| Подпись | Свойство | Значение по умолчанию |
|---|---|---|
| Описание | DescriptionCaption |
Описание товара: |
| Производитель | ManufacturerCaption |
Производитель: |
| Поставщик | SupplierCaption |
Поставщик: |
| Цена | PriceCaption |
Цена: |
| Единица измерения | UnitCaption |
Единица измерения: |
| Количество на складе | StockCaption |
Количество на складе: |
| Заголовок столбца скидки | DiscountCaption |
Действующая скидка |
Изображения
| Свойство | Описание |
|---|---|
NoImage |
Картинка при отсутствии файла или пустом поле. По умолчанию не задана — область фото остаётся пустой. |
ImagesFolder |
Папка, из которой загружаются файлы по имени из ImageField. |
Размеры строки
| Свойство | По умолчанию |
|---|---|
RowHeight |
160 |
ImageColumnWidth |
120 |
DiscountColumnWidth |
110 |
RowSpacing |
8 (зона сепаратора между строками) |
OutOfStockRowColor |
голубой #ADD8E6 (количество на складе ≤ 0) |
RowSeparatorColor |
Silver (линия между записями) |
ImageLeftPadding |
8 (отступ фото от левого края) |
DataSource |
источник данных в дизайнере (DataSet / DataTable / BindingSource) |
DataMember |
имя таблицы в DataSet |
ScrollableOrderPanel — настраиваемые свойства
Поля данных
| Поле на экране | Свойство | Значение по умолчанию |
|---|---|---|
| Артикул заказа | ArticleField |
Артикул заказа |
| Статус | StatusField |
Статус заказа |
| Адрес пункта выдачи | AddressField |
Адрес пункта выдачи |
| Дата заказа | OrderDateField |
Дата заказа |
| Дата доставки | DeliveryDateField |
Дата доставки |
Подписи на экране
| Подпись | Свойство | Значение по умолчанию |
|---|---|---|
| Артикул | ArticleCaption |
Артикул заказа |
| Статус | StatusCaption |
Статус заказа |
| Адрес | AddressCaption |
Адрес пункта выдачи |
| Дата заказа | OrderDateCaption |
Дата заказа |
| Дата доставки | DeliveryDateCaption |
Дата доставки |
Размеры строки
| Свойство | По умолчанию |
|---|---|
RowHeight |
110 |
DeliveryColumnWidth |
140 |
Добавление, редактирование и удаление (CRUD)
Оба списка (ScrollableDetailPanel, ScrollableOrderPanel) поддерживают кнопки Добавить / Изменить / Удалить и клик по строке для редактирования. Формы добавления и редактирования открывает ваше приложение в обработчиках событий.
Права по ролям
| Свойство | Описание | По умолчанию |
|---|---|---|
AllowAdd |
Показать кнопку добавления | false |
AllowEdit |
Показать кнопку изменения и открывать редактирование по клику на строку | false |
AllowDelete |
Показать кнопку удаления | false |
IsEditSessionActive |
Блокирует второе окно редактирования, пока true |
false |
ValidateBeforeDelete |
Функция проверки перед удалением; верните текст ошибки для запрета | null |
При false соответствующая кнопка скрывается. При попытке действия без прав показывается MessageBox с пояснением.
События
| Событие | Когда срабатывает |
|---|---|
RecordAddRequested |
Нажата кнопка «Добавить» |
RecordEditRequested |
Клик по строке или кнопка «Изменить» |
RecordDeleting |
Перед удалением; установите Cancel = true и DenyReason для отмены |
RecordDeleted |
Строка удалена из DataTable (вызовите Update в БД) |
После закрытия формы редактирования вызовите EndEditSession(), чтобы снова можно было открыть другое окно.
Пример для администратора (товары)
var panel = new ScrollableDetailPanel { Dock = DockStyle.Fill };
panel.AllowAdd = panel.AllowEdit = panel.AllowDelete = userIsAdmin;
panel.ShowQueryPanel = userIsManagerOrAdmin;
panel.ValidateBeforeDelete = row =>
{
var article = row["Артикул"]?.ToString();
return ProductExistsInOrders(article)
? "Товар присутствует в заказе и не может быть удалён."
: null;
};
panel.RecordAddRequested += (_, __) => OpenProductForm(null);
panel.RecordEditRequested += (_, e) => OpenProductForm(e.Row);
panel.RecordDeleted += (_, e) =>
{
tableAdapter.Update(dataSet);
panel.RefreshRows();
};
Пример для менеджера (заказы — только просмотр)
ordersPanel.AllowAdd = ordersPanel.AllowEdit = ordersPanel.AllowDelete = userIsAdmin;
// менеджер: все три свойства false — кнопки скрыты, клик только выделяет строку
Обработка исключительных случаев
Библиотека показывает MessageBox в ситуациях:
- действие недоступно для роли;
- не выбрана запись для изменения или удаления;
- уже открыто окно редактирования (
IsEditSessionActive); ValidateBeforeDeleteилиRecordDeletingзапретили удаление;- ошибка при удалении строки из
DataTable.
BoundDataGridView — настраиваемые свойства
| Свойство | Описание | По умолчанию |
|---|---|---|
HighlightColumnName |
Столбец для подсветки ячеек | Действующая скидка |
ApplyRowHighlight |
Включить подсветку | true |
Appearance |
Палитра цветов | см. ниже |
AppearancePalette — настройка цветов и шрифтов
Общий объект Appearance доступен у всех трёх контролов.
Редактор в дизайнере Visual Studio
- Выберите контрол на форме.
- В окне Свойства найдите
Appearance. - Разверните узел — каждый цвет редактируется стандартным выбором цвета.
- Нажмите «…» рядом с
Appearance— откроется окно «Палитра оформления» со всеми цветами, шрифтами и порогом скидки; кнопка «По умолчанию» сбрасывает значения.
Изменения сразу применяются к контролу на форме в режиме дизайна.
| Свойство | Назначение | По умолчанию |
|---|---|---|
MainBackground |
Основной фон | #FFFFFF |
SectionBackground |
Фон заголовков таблицы | #F5DEB3 |
AccentBackground |
Линии сетки таблицы | #DEB887 |
HighlightBackground |
Подсветка скидки > порога | #FFDEAD |
SelectedRowBackground |
Фон выбранной строки списка | #E8EEF8 |
PrimaryText |
Цвет текста | Black |
SeparatorText |
Цвет разделителя \| |
Gray |
BorderColor |
Рамки строк списка | Black |
RowSeparatorColor |
Линия между записями | Silver |
OutOfStockBackground |
Фон строки без товара на складе | #ADD8E6 |
StrikethroughPriceColor |
Перечёркнутая цена при скидке | Red |
FinalPriceColor |
Итоговая цена при скидке | Black |
FontFamily |
Шрифт | Arial |
BaseFontSize |
Размер обычного текста | 9 |
TitleFontSize |
Размер заголовка строки | 10 |
HighlightThresholdPercent |
Порог подсветки скидки (%) | 17 |
Примеры использования
Список товаров с привязкой к DataSet
using System.Data;
using System.Drawing;
using AlfaToad.CustomControls.Controls;
using AlfaToad.CustomControls.Theme;
var panel = new ScrollableDetailPanel { Dock = DockStyle.Fill };
panel.NoImage = Image.FromFile(@"C:\images\no-photo.png");
panel.ImagesFolder = @"C:\images\products";
panel.CategoryField = "CategoryName";
panel.NameField = "ProductName";
panel.DiscountField = "DiscountPercent";
panel.Appearance = new AppearancePalette
{
MainBackground = Color.White,
HighlightBackground = Color.FromArgb(255, 222, 173),
BorderColor = Color.Black,
HighlightThresholdPercent = 17m
};
DataSet dataSet = LoadProducts();
panel.BindDataSet(dataSet, "Products");
Поведение цены: если Действующая скидка > 0, основная цена отображается красной и перечёркнутой, рядом — итоговая цена чёрным (цена × (1 − скидка/100)).
Нет на складе: если Кол-во на складе ≤ 0, вся строка подсвечивается цветом OutOfStockRowColor.
Поиск, фильтрация и сортировка (ScrollableDetailPanel)
Панель включена по умолчанию (ShowQueryPanel = true). Всё применяется в реальном времени без кнопки «Найти».
| Элемент | Поведение |
|---|---|
| Поиск | Подстрока по всем текстовым столбцам (string), одновременно по нескольким полям (логика OR) |
| Сортировка | Цена ↑/↓, кол-во на складе ↑/↓; выбор сохраняется при поиске и фильтре |
| Поставщик | Выпадающий список; первый пункт Все поставщики сбрасывает фильтр |
| Свойство | Описание |
|---|---|
ShowQueryPanel |
Показать панель (по умолчанию true) |
AllSuppliersCaption |
Текст сброса фильтра (Все поставщики) |
SearchFields |
Ограничить столбцы поиска (пусто = все текстовые) |
SupplierField |
Столбец для фильтра поставщика (Поставщик) |
PriceField / StockField |
Столбцы для сортировки |
panel.ShowQueryPanel = userIsManagerOrAdmin;
После TableAdapter.Fill(...) список и список поставщиков обновляются автоматически.
Список заказов
var orders = new ScrollableOrderPanel { Dock = DockStyle.Fill };
orders.Appearance = AppearancePalette.CreateDefault();
orders.Appearance.AccentBackground = Color.BurlyWood;
orders.BindDataSet(dataSet, "Orders");
Таблица с подсветкой скидки
var grid = new BoundDataGridView { Dock = DockStyle.Fill };
grid.Appearance = AppearancePalette.CreateDefault();
grid.HighlightColumnName = "Действующая скидка";
grid.ApplyDefaultStyle();
grid.BindDataSet(dataSet, "Products");
Смена цветов после создания
panel.Appearance.MainBackground = ColorTranslator.FromHtml("#FAFAFA");
panel.Appearance.HighlightBackground = ColorTranslator.FromHtml("#FFDEAD");
panel.Appearance.BorderColor = Color.DimGray;
panel.ApplyAppearance();
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 is compatible. net9.0-windows was computed. net10.0-windows was computed. |
| .NET Framework | net48 is compatible. net481 was computed. |
-
.NETFramework 4.8
- No dependencies.
-
net8.0-windows7.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on AlfaToad.CustomControls:
| Package | Downloads |
|---|---|
|
AlfaToad.DataSetCRUDS
Готовые формы добавления и редактирования для ScrollableDetailPanel и ScrollableOrderPanel с привязкой к DataSet. |
|
|
AlfaToad.DefaultScreens
Готовые экранные формы WinForms с ролевым доступом, входом и каталогом на базе AlfaToad.CustomControls и AlfaToad.DataSetCRUDS. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.2.10 | 163 | 6/8/2026 |
| 4.2.9 | 112 | 6/8/2026 |
| 4.2.8 | 118 | 6/8/2026 |
| 4.2.7 | 128 | 6/8/2026 |
| 4.2.6 | 141 | 6/8/2026 |
| 4.2.5 | 352 | 6/7/2026 |
| 4.2.4 | 117 | 6/7/2026 |
| 4.2.3 | 133 | 6/7/2026 |
| 4.2.2 | 121 | 6/7/2026 |
| 4.2.1 | 137 | 6/6/2026 |
| 4.2.0 | 113 | 6/6/2026 |
| 4.1.3 | 111 | 6/5/2026 |
| 4.1.2 | 115 | 6/5/2026 |
| 4.1.1 | 120 | 6/5/2026 |
| 4.1.0 | 112 | 6/5/2026 |
| 4.0.0 | 110 | 6/5/2026 |
| 3.0.2 | 104 | 6/5/2026 |
| 3.0.1 | 98 | 6/5/2026 |
| 3.0.0 | 111 | 6/5/2026 |
| 2.0.2 | 116 | 6/4/2026 |