Пользовательский элемент управления C# для WinForm, который лучше поддерживает работу с сенсорным экраном. Проект основан на Framework 4.0 и представляет собой полностью нативное управление без использования сторонних элементов управления.
Блог: https://www.cnblogs.com/bfyx
Code Cloud: https://gitee.com/kwwwvagaa/net_winform_custom_control.git
Добро пожаловать в обсуждение: Присоединяйтесь к группе QQ 568015492
Если мой код вам полезен, пожалуйста, вознаградите меня. Спасибо, ваша награда — моя мотивация.
Исходный код предназначен только для обмена и обучения. Соглашение об открытом исходном коде — MPL 2.0 (https://gitee.com/kwwwvagaa/net_winform_custom_control/blob/master/LICENSE). Для коммерческого использования свяжитесь с владельцем группы.
Приходите сюда, приходите к «Звезде» и вперёд!
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>() { { «phone», "^1\\d{10}$" }, { «ID number», "^\\d{18}$" } },
New Dictionary<string, KeyBoardType>() { { «phone», KeyBoardType.UCKeyBorderNum }, { «ID number», KeyBoardType.UCKeyBorderNum } },
New List<string>() { «имя», «телефон», «идентификационный номер» });
frm.ShowDialog(this);
``` **1. Public FrmInputs**
name 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 mastInputs = null, Dictionary<string, string> defaultValues = null)
**2. Temp1 form**
На этом месте в запросе нет текста.
**3. Form FrmTemp1Test наследует HZH_Controls.Forms.FrmTemp1**
``` csharp
/ / New form FrmTemp1Test inherits HZH_Controls.Forms.FrmTemp1
FrmTemp1Test frm = new FrmTemp1Test();
frm.ShowDialog(this);
4. Форма для подтверждения отмены 1
На этом месте в запросе нет текста.
5. Форма для подтверждения отмены 2
/ / New form FrmOKCancel2Test inherits HZH_Controls.Forms.FrmWithOKCancel2
FrmOKCancel2Test frm = new FrmOKCancel2Test();
frm.ShowDialog(this);
6. Форма с одним заголовком
/ / New form FrmWithTitleTest inherits HZH_Controls.Forms.FrmWithTitle
FrmWithTitleTest frm = new FrmWithTitleTest();
frm.ShowDialog(this);
7. Элементы управления
Текстовое поле с эффектом клавиатуры
На этом месте в запросе нет текста и изображений.
Контроль времени
На этом месте в запросе нет текста и изображений.
Раскрывающийся список привязки данных
/ / Use the method is similar to the native ComboBox
List<KeyValuePair<string, string>> lstCom = new List<KeyValuePair<string, string>>();
For (int i = 0; i < 5; i++)
{
lstCom.Add(new KeyValuePair<string, string>(i.ToString(), "options" + i));
}
this.ucComboBox1.Source = lstCom;
this.ucComboBox2.Source = lstCom;
this.ucComboBox1.SelectedIndex = 1;
this.ucComboBox2.SelectedIndex = 1;
Привязка данных к дереву
/ / Use the same method as the native Treeview, set the property IsShowByCustomModel = true to enable the custom mode, otherwise the original tree
For (int i = 0; i < 5; i++)
{
TreeNode tn = new TreeNode("parent node" + i);
For (int j = 0; j < 5; j++)
{
tn.Nodes.Add("child node" + j);
}
this.treeViewEx1.Nodes.Add(tn);
}
Список привязки данных
/ / Customizable color fonts, etc.
List<ListEntity> lst = new List<ListEntity>();
For (int i = 0; i < 5; i++)
{
lst.Add(new ListEntity()
{
ID = i.ToString(),
Title = "options" + i,
ShowMoreBtn = true,
Source = i
});
}
this.ucListExt1.SetList(lst);
Горизонтальный список привязки данных
List<KeyValuePair<string, string>> lstHL = new List<KeyValuePair<string, string>>();
For (int i = 0; i < 30; i++)
{
lstHL.Add(new KeyValuePair<string, string>(i.ToString(), "options" + i));
}
this.ucHorizontalList1.DataSource = lstHL;
8. Datagridview
На этом месте в запросе нет текста и изображений. Перевод текста на русский язык:
List<DataGridViewColumnEntity> lstCulumns = new List<DataGridViewColumnEntity>();
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "ID", HeadText = "Number", Width = 70, WidthType = SizeType.Absolute });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Name", HeadText = "Name", Width = 50, WidthType = SizeType.Percent });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Age", HeadText = "Age", Width = 50, WidthType = SizeType.Percent });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Birthday", HeadText = "Birthday", Width = 50, WidthType = SizeType.Percent, Format = (a) => { return ((DateTime)a).ToString("yyyy-MM-dd"); } });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Sex", HeadText = "Gender", Width = 50, WidthType = SizeType.Percent, Format = (a) => { return ((int)a) == 0 ? "female": "male"; } });
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 = "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();
10. Отображение всплывающих подсказок (5 встроенных и пользовательских стилей):
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)
*/
11. Ожидание многопоточной операции:

/ / Эта форма обычно используется в длительных операциях потока для отображения анимации ожидания, ниже приведён пример длительной операции с использованием нескольких потоков
ControlHelper.ThreadRunExt(this, () =>
{
Thread.Sleep(5000);
ControlHelper.ThreadInvokerControl(this, () =>
{
FrmTips.ShowTipsSuccess(this, "FrmWaiting test");
});
}, 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>
/// <param 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)
12. Управление навигацией по меню:

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
``` **//Timer randomly adds numbers at regular intervals**
Random r = new Random();
Int i = r.Next(100, 1000);
this.ucWaveWithSource1.AddSource(i.ToString(), i);
**//23, TreeGrid**
``` csharp
Private void FrmTemp1Test_Load(object sender, EventArgs e)
{
this.ucDataGridView1.RowType = typeof(UCDataGridViewTreeRow);
this.ucDataGridView1.IsAutoHeight = true;
List<DataGridViewColumnEntity> lstCulumns = new List<DataGridViewColumnEntity>();
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "ID", HeadText = "Number", Width = 70, WidthType = SizeType.Absolute });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Name", HeadText = "Name", Width = 50, WidthType = SizeType.Percent });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Age", HeadText = "Age", Width = 50, WidthType = SizeType.Percent });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Birthday", HeadText = "Birthday", Width = 50, WidthType = SizeType.Percent, Format = (a) => { return ((DateTime)a).ToString(" yyyy-MM-dd"); } });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Sex", HeadText = "Gender", Width = 50, WidthType = SizeType.Percent, Format = (a) => { return ((int)a) == 0 ? "female": "male"; } });
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 = "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);
}
}
//24, table drop-down box
List<DataGridViewColumnEntity> lstCulumns = new List<DataGridViewColumnEntity>();
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "ID", HeadText = "Number", Width = 70, WidthType = SizeType.Absolute });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Name", HeadText = "Name", Width = 100, WidthType = SizeType.Absolute });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Age", HeadText = "Age", Width = 100, WidthType = SizeType.Absolute });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Birthday", HeadText = "Birthday", Width = 120, WidthType = SizeType.Absolute, Format = (a) => { return ((DateTime)a).ToString("yyyy-MM-dd"); } });
lstCulumns.Add(new DataGridViewColumnEntity() { DataField = "Sex", HeadText = "Gender", Width = 100, WidthType = SizeType.Absolute, Format = (a) => { return ((int)a) == 0 ? "female": "male"; } });
this.ucComboxGrid1.GridColumns =
``` **lstColumns;**
List<object> lstSourceGrid = new List<object>();
For (int i = 0; i < 100; i++)
{
TestModel model = new TestModel()
{
ID = i.ToString(),
Age = 3 * i,
Name = "name -" + i,
Birthday = DateTime.Now.AddYears(-10),
Sex = i % 2
};
lstSourceGrid.Add(model);
}
this.ucComboxGrid1.GridDataSource = lstSourceGrid;
**25. TrackBar**
*Текст без перевода.*
**26. ToolTips (toolTips)**
*Текст без перевода.*
**27. Scrolling text**
*Текст без перевода.*
**28. Instrument**
*Текст без перевода.*
**29. Pipeline**
*Текст без перевода.*
**30. Bottle**
*Текст без перевода.*
**31. Conveyor belt**
*Текст без перевода.*
**32. Valve**
*Текст без перевода.*
**33. Blower**
*Текст без перевода.*
**34. Signal light**
*Текст без перевода.*
**35. Alarm Lamp**
*Текст без перевода.*
**36. Temperature**
*Текст без перевода.*
**37. Mind Mapping**
*Текст без перевода.*
**38. Icon**
*Текст без перевода.*
**39. BarChart**
*Текст без перевода.*
**40. PieChart**
*Текст без перевода.*
**41. LineChart**
*Текст без перевода.*
**42. RadarChart**
*Текст без перевода.*
**43. LoadingSourceForm**
*Текст без перевода.*
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )