Пользовательские элементы управления C# WinForm, которые поддерживают более эффективную работу с сенсорными экранами. Проект основан на framework 4.0 и полностью разработан с использованием собственных элементов управления без использования каких-либо сторонних элементов управления. Вы можете смело использовать его в своих проектах.
Адрес блога: https://www.cnblogs.com/bfyx
Код Cloud: https://gitee.com/kwwwvagaa/net_winform_custom_control.git
Добро пожаловать для общения и обсуждения: нажмите, чтобы присоединиться к группе QQ 568015492
Install-Package HZH_Controls
Приведённый ниже контент является лишь частью элементов управления, для просмотра демонстрационных эффектов других элементов управления загрузите исходный код!
if (FrmDialog.ShowDialog(this, «Вы хотите снова отобразить окно подсказки без кнопки отмены?», «Тестирование оконного режима», true) == System.Windows.Forms.DialogResult.OK)
{
FrmDialog.ShowDialog(this, "Это окно подсказки без кнопки отмены", "Тестирование оконного режима");
}
FrmInputs frm = new FrmInputs("Тестирование динамического многооконного ввода",
new string[] { "Имя", "Телефон", "Номер удостоверения личности", "Адрес" },
new Dictionary<string, HZH_Controls.TextInputType>() { { "Телефон", HZH_Controls.TextInputType.Regex }, { "Номер удостоверения личности", HZH_Controls.TextInputType.Regex } },
new Dictionary<string, string>() { { "Телефон", "^1\\d{10}$" }, { "Номер удостоверения личности", "^\\d{18}$" } },
new Dictionary<string, KeyBoardType>() { { "Телефон", KeyBoardType.UCKeyBorderNum }, { "Номер удостоверения личности", KeyBoardType.UCKeyBorderNum } },
new List<string>() { "Имя", "Телефон", "Номер удостоверения личности" });
frm.ShowDialog(this);
/// <summary>
/// Описание функции: конструктор
/// Автор: HZH
/// Дата создания: 2019-08-05 10:57:26
/// Номер задачи: POS
/// </summary>
/// <param name="strTitle">Заголовок окна</param>
/// <param name="args">Имя элемента ввода</param>
/// <param name="inTypes">Тип ввода элемента ввода, ключ: имя элемента ввода, например, если не установлено значение по умолчанию, не контролируется ввод</param>
/// <param name="regexs">Ключ элемента ввода соответствует регулярному выражению, когда imTypes=Regex действует, ключ: элемент ввода имени, например, если он не установлен, по умолчанию не контролируется ввод</param>
/// <param name="keyBoards">Клавиатура текстового поля, ключ: имя элемента ввода, например, если оно не установлено, по умолчанию используется английская клавиатура</param>
/// <param name="mastInputs">Обязательные элементы ввода имени</param>
/// <param name="defaultValues">Значение по умолчанию для элемента ввода, ключ: имя элемента ввода</param>
public FrmInputs(
string strTitle,
string[] inPutLabels,
Dictionary<string, TextInputType> inTypes = null,
Dictionary<string, string> regexs = null,
Dictionary<string, HZH_Controls.Controls.KeyBoardType> keyBoards = null,
List<string> mastInputs = null,
Dictionary<string, string> defaultValues = null)
//Создаём новое окно FrmTemp1Test, наследуя от HZH_Controls.Forms.FrmTemp1
FrmTemp1Test frm = new FrmTemp1Test();
frm.ShowDialog(this);
//Создаем новое окно FrmOKCancel1Test, унаследованное от HZH_Controls.Forms.FrmWithOKCancel1
FrmOKCancel1Test frm = new FrmOKCancel1Test();
frm.ShowDialog(this);
//Создаем новое окно FrmOKCancel2Test, унаследованное от HZH_Controls.Forms.FrmWithOKCancel2
FrmOKCancel2Test frm = new FrmOKCancel2Test();
frm.ShowDialog(this);
Примечание: в тексте запроса присутствуют фрагменты кода на языке C#, но они не были переведены. Вот перевод текста на русский язык:
List<DataGridViewColumnEntity> lstCulumns = new List<DataGridViewColumnEntity>();
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "ID", HeadText = "Номер", Width = 70, WidthType = SizeType.Absolute });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Name", HeadText = "Имя", Width = 50, WidthType = SizeType.Percent });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Age", HeadText = "Возраст", Width = 50, WidthType = SizeType.Percent });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Birthday", HeadText = "День рождения", Width = 50, WidthType = SizeType.Percent, Format = (a) => { return ((DateTime)a).ToString("yyyy-MM-dd"); } });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Sex", HeadText = "Пол", Width = 50, WidthType = SizeType.Percent, Format = (a) => { return ((int)a) == 0 ? "женщина" : "мужчина"; } });
this.ucDataGridView1.Columns = lstCulumns;
this.ucDataGridView1.IsShowCheckBox = true;
List<object> lstSource = new List<object>();
for (int i = 0; i < 20; i++)
{
TestModel model = new TestModel()
{
ID = i.ToString(),
Age = 3 * i,
Name = "имя —" + i,
Birthday = DateTime.Now.AddYears(-10),
Sex = i % 2
};
lstSource.Add(model);
}
UCPagerControl page = new UCPagerControl();
//UCPagerControl2 page = new UCPagerControl2();
page.DataSource = lstSource;
this.ucDataGridView1.Page = page;
this.ucDataGridView1.First();
Если UCPagerControl не удовлетворяет вашим требованиям, пожалуйста, настройте свой собственный компонент для перелистывания и наследуйте от UCPagerControlBase, например, измените стиль, добавьте логику и т. д.
Если вам нужна страница данных, начинающаяся с 10-й, вы можете установить StartIndex=10, а затем вызвать GetCurrentSource(), чтобы использовать его следующим образом:
m_page.DataSource=lstSource;
m_page.PageSize = ShowCount;
m_page.StartIndex=10;
this.dgv.DataSource = m_page.GetCurrentSource();
Компонент для перелистывания можно использовать для любых элементов управления в виде списка. В приведённом выше примере кода используется только datagridview. Вот как это работает:
m_page.DataSource=lstSource;
m_page.PageSize = ShowCount;
this.dgv.DataSource = m_page.GetCurrentSource();
FrmTips.ShowTipsError(this, "Ошибка сообщения");
FrmTips.ShowTipsInfo(this, "Информационное сообщение");
FrmTips.ShowTipsSuccess(this, "Сообщение об успехе");
FrmTips.ShowTipsWarning(this, "Предупреждающее сообщение");
/*Пользовательский метод может быть использован
public static FrmTips ShowTips(
Form frm,
string strMsg,
int intAutoColseTime = 0,
bool blnShowCoseBtn = true,
ContentAlignment align = ContentAlignment.BottomLeft,
Point? point = null,
TipsSizeMode mode = TipsSizeMode.Small,
Size? size = null,
TipsState state = TipsState.Default)
*/
//Этот диалог обычно используется для отображения анимации ожидания во время длительных операций потока. Ниже приведён пример многопоточной операции ожидания.
ControlHelper.ThreadRunExt(this, () =>
{
Thread.Sleep(5000);
ControlHelper.ThreadInvokerControl(this, () =>
{
FrmTips.ShowTipsSuccess(this, «FrmWaiting тест»);
});
}, null, this);
//ControlHelper.ThreadRunExt запускает поток для выполнения задачи
//ControlHelper.ThreadInvokerControl асинхронно делегирует вызов элемента управления
/// <summary>
/// Использование потока для выполнения операции
/// </summary>
/// <param name="parent">Родительский элемент управления</param>
/// <param name="func">Содержимое выполнения</param>
/// <param name="callback">Действие после выполнения</param>
/// <param name="enableControl">Список элементов управления, которые будут отключены во время выполнения</param>
/// <param name="blnShowSplashScreen">Показывать ли экран ожидания во время выполнения</param>
/// <param name="strMsg">Содержание экрана ожидания во время выполнения, по умолчанию «Обработка, пожалуйста, подождите...»</param>
/// <name name="intSplashScreenDelayTime">Время задержки отображения экрана ожидания</param>
public static void ThreadRunExt(
Control parent,
Action func,
Action<object> callback,
Control[] enableControl = null,
bool blnShowSplashScreen = true,
string strMsg = null,
int intSplashScreenDelayTime = 200)
 1. Создание списка пунктов меню
List<MenuItemEntity> lstMenu = new List<MenuItemEntity>();
for (int i = 0; i < 5; i++)
{
MenuItemEntity item = new MenuItemEntity()
{
Key = "p" + i.ToString(),
Text = "菜单项" + i,
DataSource = "Здесь напишите некоторый пользовательский источник данных для расширения"
};
item.Childrens = new List<MenuItemEntity>();
for (int j = 0; j < 5; j++)
{
MenuItemEntity item2 = new MenuItemEntity()
{
Key = "c" + i.ToString(),
Text = "子菜单项" + i + "-" + j,
DataSource = "Здесь напишите некоторый пользовательский источник данных для расширения"
};
item.Childrens.Add(item2);
}
lstMenu.Add(item);
}
this.ucMenu1.DataSource = lstMenu;
2. Если предустановленные стили не удовлетворяют вашим потребностям, вы можете создать собственные узлы управления:
3. Изменение стиля узла, например цвета фона:
Используйте свойства ParentItemStyles и ChildrenItemStyles в UCMenu. Например:
this.ucMenu1.ParentItemStyles = new Dictionary<string, object>() { {"BackColor",Color.Red } };
this.ucMenu1.ChildrenItemStyles = new Dictionary<string, object>() { {"BackColor",Color.Yellow } };
По умолчанию стиль отображения меню — Fill. Когда элементов меню слишком много, дочерние элементы могут не отображаться. В этом случае измените стиль меню на Top:
this.ucMenu1.MenuStyle = MenuStyle.Top;
4. Группы кнопок
Добавьте данные в группы кнопок:
ucBtnsGroup1.DataSource = new Dictionary<string, string>() { { "1", "муж" }, { "0", "жен" } };
ucBtnsGroup2.IsMultiple = true;
ucBtnsGroup2.DataSource = new Dictionary<string, string>() { { "1", "хэнань" }, { "2", "пекин" }, { "3", "хунань" }, { "4", "шанхай" } };
ucBtnsGroup2.SelectItem = new List<string>() { "2","3"};
5. Таблицы с вкладками
6. Шаги процесса
7. Панели с заголовками
8. Индикаторы выполнения
Индикаторы выполнения поддерживают как кольцевую, так и секторную форму отображения, а также процентное значение и числовое отображение.
9. Волны
Волны поддерживают круглую и секторную формы отображения.
10. Деревья таблиц Данный фрагмент кода написан на языке C#. Вот его перевод на русский язык:
typeof(UCDataGridViewTreeRow);
this.ucDataGridView1.IsAutoHeight = true;
List<DataGridViewColumnEntity> lstCulumns = new List<DataGridViewColumnEntity>();
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "ID", HeadText = "编号", Width = 70, WidthType = SizeType.Absolute });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Name", HeadText = "姓名", Width = 50, WidthType = SizeType.Percent });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Age", HeadText = "年龄", Width = 50, WidthType = SizeType.Percent });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Birthday", HeadText = "生日", Width = 50, WidthType = SizeType.Percent, Format = (a) => { return ((DateTime)a).ToString("yyyy-MM-dd"); } });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Sex", HeadText = "性别", Width = 50, WidthType = SizeType.Percent, Format = (a) => { return ((int)a) == 0 ? "女" : "男"; } });
this.ucDataGridView1.Columns = lstCulumns;
this.ucDataGridView1.IsShowCheckBox = true;
List<object> lstSource = new List<object>();
for (int i = 0; i < 200; i++)
{
TestModel model = new TestModel()
{
ID = i.ToString(),
Age = 3 * i,
Name = "姓名——" + i,
Birthday = DateTime.Now.AddYears(-10),
Sex = i % 2
};
lstSource.Add(model);
AddChilds(model, 5);
}
var page = new UCPagerControl2();
page.DataSource = lstSource;
this.ucDataGridView1.Page = page;
this.ucDataGridView1.First();
}
private void AddChilds(TestModel tm, int intCount)
{
if (intCount <= 0)
return;
tm.Childrens = new List<TestModel>();
for (int i = 0; i < 5; i++)
{
TestModel model = new TestModel()
{
ID = i.ToString(),
Age = 3 * i,
Name = intCount + "——" + i,
Birthday = DateTime.Now.AddYears(-10),
Sex = i % 2
};
tm.Childrens.Add(model);
AddChilds(model, intCount - 1);
}
}
В этом фрагменте кода создаются и заполняются данными таблицы, а также добавляются различные элементы управления. ```csharp HZH_Controls.Forms.FrmAnchorTips.ShowTips(button1, "测试提示信息\nLEFT", AnchorTipsLocation.LEFT); HZH_Controls.Forms.FrmAnchorTips.ShowTips(button1, "测试提示信息\nRIGHT", AnchorTipsLocation.RIGHT); HZH_Controls.Forms.FrmAnchorTips.ShowTips(button1, "测试提示信息\nTOP", AnchorTipsLocation.TOP); HZH_Controls.Forms.FrmAnchorTips.ShowTips(button1, "测试提示信息\nBOTTOM", AnchorTipsLocation.BOTTOM);
26. LED 数字.
27. Скругливающаяся надпись.
28. Приборная панель.
29. Трубопровод.
30. Бутылка.
31. Конвейер.
32. Задвижка на трубопроводе.
33. Вентилятор.
34. Светофор.
35. Сигнальная лампа.
36. Термометр.
37. Организационная диаграмма.
38. Значки.
39. Гистограмма.
40. Круговая диаграмма.
41. Линейный график.
42. Окно загрузки ресурсов.
43. Пирамида.
44. Компонент водяного знака для элементов управления.
45. Компонент проверки формы.
46. Элемент управления выборкой.
```csharp
Обратите внимание на пересечение элементов управления, они не перекрываются.
Элементы управления реализуют работу без перекрытия, используя заданную область отсечения.
Эффект тени.
Навигационное меню.
Разделительная линия. 50. Временная шкала
Контейнеры для перемещения
Блоки с цитатами
Наконец, ставьте звёзды, если вам нравится. Если вы хотите предложить какие-то другие часто используемые элементы управления, пожалуйста, оставьте комментарий.
Если информация была вам полезна, пожалуйста, вознаградите меня. Спасибо!
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )