1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/kwwwvagaa-net_winform_custom_control

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_CN.md 23 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 07:58 04dd87b

Официальный сайт

https://www.hzhcontrols.cn/

NetWinform пользовательские элементы управления

English README.md(gitee)

Введение

Пользовательские элементы управления C# WinForm, которые поддерживают более эффективную работу с сенсорными экранами. Проект основан на framework 4.0 и полностью разработан с использованием собственных элементов управления без использования каких-либо сторонних элементов управления. Вы можете смело использовать его в своих проектах.

Адрес блога: https://www.cnblogs.com/bfyx

Код Cloud: https://gitee.com/kwwwvagaa/net_winform_custom_control.git

Добро пожаловать для общения и обсуждения: нажмите, чтобы присоединиться к группе QQ 568015492

Если мой код вам полезен, пожалуйста, отсканируйте его!

введите описание изображения введите описание изображения

Исходный код предназначен только для обмена и обучения, лицензия с открытым исходным кодом — MPL2.0 (https://gitee.com/kwwwvagaa/net_winform_custom_control/blob/master/LICENSE), если вы используете его в коммерческих целях, пожалуйста, свяжитесь с администратором группы.

Все уже здесь, просто нажмите «Star» и уходите.

NuGet

Install-Package HZH_Controls
Приведённый ниже контент является лишь частью элементов управления, для просмотра демонстрационных эффектов других элементов управления загрузите исходный код!

введите описание изображения введите описание изображения

Пример

1. Окно с подсказками

Пример изображения Пример изображения

if (FrmDialog.ShowDialog(this, «Вы хотите снова отобразить окно подсказки без кнопки отмены?», «Тестирование оконного режима», true) == System.Windows.Forms.DialogResult.OK)
{
    FrmDialog.ShowDialog(this, "Это окно подсказки без кнопки отмены", "Тестирование оконного режима");
}
2. Многооконное окно ввода

Пример изображения

 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)
3. Окно Temp1

Пример изображения

//Создаём новое окно FrmTemp1Test, наследуя от HZH_Controls.Forms.FrmTemp1
FrmTemp1Test frm = new FrmTemp1Test();
frm.ShowDialog(this);
4. Окно с кнопками «ОК» и «Отмена» 1

Пример изображения

//Создаем новое окно FrmOKCancel1Test, унаследованное от HZH_Controls.Forms.FrmWithOKCancel1
FrmOKCancel1Test frm = new FrmOKCancel1Test();
frm.ShowDialog(this);
5. Окно с кнопками «ОК» и «Отмена» 2

Пример изображения

//Создаем новое окно FrmOKCancel2Test, унаследованное от HZH_Controls.Forms.FrmWithOKCancel2
FrmOKCancel2Test frm = new FrmOKCancel2Test();
frm.ShowDialog(this);
6. Однозаголовочное окно

Примечание: в тексте запроса присутствуют фрагменты кода на языке 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. Вот как это работает:

  1. Установите свойство DataSource для источника данных.
  2. Установите свойство PageSize для отображения количества данных на каждой странице.
  3. Установите время ShowSourceChanged, чтобы установить текущий источник данных для целевого элемента управления.
  4. Если после загрузки страницы первая страница данных не отображается, вы можете вручную вызвать GetCurrentSource() и присвоить значение целевому элементу управления, например:
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 тест»);
    });
}, 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)
12. Компонент навигации по меню

![Образец изображения](https://images.gitee.com/uploads/images/2019/0815/103949_9fdb0d12_301547.png «menu.png») 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. Если предустановленные стили не удовлетворяют вашим потребностям, вы можете создать собственные узлы управления:

  1. Добавьте новый элемент управления, реализующий интерфейс IMenuItem, чтобы можно было отдельно определить родительские и дочерние узлы.
  2. На основе UCMenuChildrenItem или UCMenuParentItem создайте свой узел.
  3. Установите свойства ParentItemType и ChildrenItemType в UCMenu, чтобы использовать ваш новый узел.

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
Обратите внимание на пересечение элементов управления, они не перекрываются.
Элементы управления реализуют работу без перекрытия, используя заданную область отсечения.
  1. Эффект тени.

  2. Навигационное меню.

  3. Разделительная линия. 50. Временная шкала

  4. Контейнеры для перемещения

  5. Блоки с цитатами

Наконец, ставьте звёзды, если вам нравится. Если вы хотите предложить какие-то другие часто используемые элементы управления, пожалуйста, оставьте комментарий.

Если информация была вам полезна, пожалуйста, вознаградите меня. Спасибо!

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/kwwwvagaa-net_winform_custom_control.git
git@api.gitlife.ru:oschina-mirror/kwwwvagaa-net_winform_custom_control.git
oschina-mirror
kwwwvagaa-net_winform_custom_control
kwwwvagaa-net_winform_custom_control
master