Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53

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

28.07.2018, 08:26. Показов 3840. Ответов 17

Студворк — интернет-сервис помощи студентам
Привет всем! Вопрос собственно по теме. Как его создать? Очень мало информации в интернете и на YouTube. Я вроде бы разобрался с простыми элементами, их событиями и свойствами. Но вот как создавать сложные конструкции? К примеру на форме есть GroupBox, в нем Grid, еще там какие нибудь кнопки. Хотелось бы сделать UserControl с возможностью изменять отдельные свойства элементов. Как эти свойства создать разобрался, а вот как их сгруппировать в окне свойств и событий не пойму. К примеру создать группу со свойствами кнопки (Text, Enebled, Size и тд.), группу свойств Грида или GroupBox. В общем примерно как в компонентах DevExpress. Заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.07.2018, 08:26
Ответы с готовыми решениями:

Как правильно удалить элемент управления формы и как правильно после этого переименовать элементы управления?
Еще раз доброе утро! В ходе работы возник вопрос. У меня на форме три Label: Label1, Label2, Label3. Я выделил на форме Label1 и нажал...

Что за элемент управления?
как реализован такое элемент? гибрид treeview и datagridview? или как такой получить? Мне нужно treeview с колонками

Элемент управления ToolStripTextBox1
Добрый день еще раз. Я вновь с глупым вопросом:-| Подскажите пожалуйста, как можно набранный текст скрывать, скажем в *, как у...

17
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
29.07.2018, 00:06
Цитата Сообщение от Qusar Посмотреть сообщение
примерно как в компонентах DevExpress
DevExpress пишутся с нуля. наследуясь от Control или Component
UserControl — это элемент управления, который можно поместить на форму и который состоит из других элементов управления.
Создаётся очень просто: Project→Add UserControl...
1
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
29.07.2018, 13:18  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
DevExpress пишутся с нуля. наследуясь от Control или Component
UserControl — это элемент управления, который можно поместить на форму и который состоит из других элементов управления.
Создаётся очень просто: Project→Add UserControl...
Это все понятно, я имею ввиду окно свойств в этих компонентах. Там всегда есть какие то общие свойства элемента и есть группа Proporties к примеру, где перечислены уже свойства какие то авторские. Вот у меня и вопрос как сгруппировать свойства элемента?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
29.07.2018, 13:50
Лучший ответ Сообщение было отмечено Qusar как решение

Решение

Цитата Сообщение от Qusar Посмотреть сообщение
как сгруппировать свойства элемента?
Для этого используется атрибут Category
Вот например
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Imports System.ComponentModel
 
Public Class MyUserControl
    <Category("Мои свойства")>
    Public Property NewProperty1() As String
    <Category("Мои свойства")>
    Public Property NewProperty2() As String
    <Category("Мои свойства")>
    Public Property NewProperty3() As String
    <Category("Мои свойства")>
    Public Property NewProperty4() As String
End Class
Миниатюры
Пользовательский элемент управления  
3
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
29.07.2018, 17:06  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Для этого используется атрибут Category
Вот например
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Imports System.ComponentModel
Public Class MyUserControl
* * <Category("Мои свойства")>
* * Public Property NewProperty1() As String
* * <Category("Мои свойства")>
* * Public Property NewProperty2() As String
* * <Category("Мои свойства")>
* * Public Property NewProperty3() As String
* * <Category("Мои свойства")>
* * Public Property NewProperty4() As String
End Class
Да, да, вот именно это я и хотел получить. Спасибо большое. А как в созданной группе добавить подгруппу?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
29.07.2018, 17:25
Цитата Сообщение от Qusar Посмотреть сообщение
как в созданной группе добавить подгруппу?
Нет никаких групп и подгрупп. Есть категории.
0
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
29.07.2018, 17:42  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Нет никаких групп и подгрупп. Есть категории.
Хорошо. Тогда как в категории "Мои свойства", добавить категорию "Мои свойства2"?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
29.07.2018, 17:44
Qusar, никак. Зачем? Где ты такое видел? Желательно, пример со скриншотом
0
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
29.07.2018, 17:48  [ТС]
Это из DevExpress
Миниатюры
Пользовательский элемент управления  
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
29.07.2018, 18:38
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Это вообще не категории, видно по переключателю в левом углу. Это составные (или сложные) свойства. Для их отображения нужно указывать конвертер типа в атрибуте TypeConverter. Если свойства простые, то достаточно использовать ExpandableObjectConverter, иначе писать свой конвертер, наследуясь от typeconverter
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Imports System.ComponentModel
 
Public Class MyUserControl
    Public Property ComplexProperty() As Class1
    Public Sub New()
 
        ' This call is required by the designer.
        InitializeComponent()
 
        ' Add any initialization after the InitializeComponent() call.
        ComplexProperty = New Class1()
    End Sub
End Class
 
<TypeConverter(GetType(ExpandableObjectConverter))>
Public Class Class1
    Public Property NewProperty1() As String
    Public Property NewProperty2() As String
    Public Property NewProperty3() As String
    Public Property NewProperty4() As String
End Class
Миниатюры
Пользовательский элемент управления  
3
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
29.07.2018, 18:43  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Это вообще не категории, видно по переключателю в левом углу. Это составные (или сложные) свойства. Для их отображения нужно указывать конвертер типа в атрибуте TypeConverter. Если свойства простые, то достаточно использовать ExpandableObjectConverter, иначе писать свой конвертер, наследуясь от typeconverter
Спасибо большое за помощь. Подскажите еще пожалуйста в каком мне направлении копать чтоб досконально изучить этот вопрос. Это не классы, что то другое?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
29.07.2018, 18:47
Qusar, почему ты решил, что это не классы? В .Net всё является классом.
Я основную информацию почерпнул из книги «C#. Разработка компонентов в MS Visual Studio 2005-2008» Павла Агурова.
1
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
29.07.2018, 18:50  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Qusar, почему ты решил, что это не классы? В .Net всё является классом.
Я основную информацию почерпнул из книги «C#. Разработка компонентов в MS Visual Studio 2005-2008» Павла Агурова.
Спасибо, обязательно почитаю эту книжку
0
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
21.08.2018, 09:40  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Qusar, почему ты решил, что это не классы? В .Net всё является классом.
Я основную информацию почерпнул из книги «C#. Разработка компонентов в MS Visual Studio 2005-2008» Павла Агурова.
Приветствую, снова нужна Ваша помощь. С свойствами вроде разобрался, а вот как быть с методами? Тут два вопроса:
1. Как их вообще создавать?
2. Как быть если мне нужно использовать базовые методы элемента? То есть по умолчанию весь перечень методов это методы так называемого полотна. А у меня к примеру есть еще Button. Так вот, как в этот перечень добавить еще метод Button.Click.

Спасибо ...
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
21.08.2018, 11:14
Цитата Сообщение от Qusar Посмотреть сообщение
Как их вообще создавать?
VB.NET
1
2
Public Sub MyMethod()
End Sub
Цитата Сообщение от Qusar Посмотреть сообщение
Как быть если мне нужно использовать базовые методы элемента? То есть по умолчанию весь перечень методов это методы так называемого полотна. А у меня к примеру есть еще Button. Так вот, как в этот перечень добавить еще метод Button.Click.
Button.Click — это событие. Будет неверным с т.з. ООП реагировать на событие контрола, находящегося внутри пользовательского элемента управления.
Объявляются события как и в любом другом классе:
VB.NET
1
Public Event MyEvent As EventHandler
Далее хорошим стилем считается вызывать это событие из метода, открытого только для потомков класса и доступного для переопределения:
VB.NET
1
2
3
Protected Overridable Sub OnMyEvent()
    RaiseEvent MyEvent
End Sub
2
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
21.08.2018, 11:25  [ТС]
Блин, я все напутал....
Я про события и имел ввиду. Сори ...
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
21.08.2018, 12:33
Вот как пример. Два пользовательских элемента управления: MyUserControl и MyUserControl2. Второй наследник первого и переопределяет действие при нажатии кнопки. В первом при нажатии кнопки вызывается событие MyEvent, во втором — MyEvent2
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Public Class MyUserControl
    Public Event MyEvent As EventHandler
 
    Protected Overridable Sub OnMyEvent()
        RaiseEvent MyEvent(Me, EventArgs.Empty)
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        OnMyEvent()
    End Sub
End Class
VB.NET
1
2
3
4
5
6
7
Public Class MyUserControl2
    Public Event MyEvent2 As EventHandler
 
    Protected Overrides Sub OnMyEvent()
        RaiseEvent MyEvent2(Me, EventArgs.Empty)
    End Sub
End Class
Вложения
Тип файла: zip WindowsApp1.zip (17.5 Кб, 22 просмотров)
3
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
21.08.2018, 12:36  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Вот как пример. Два пользовательских элемента управления: MyUserControl и MyUserControl2. Второй наследник первого и переопределяет действие при нажатии кнопки. В первом при нажатии кнопки вызывается событие MyEvent, во втором — MyEvent2
Спасибо Вам большое, очень выручаете))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.08.2018, 12:36
Помогаю со студенческими работами здесь

Поместить элемент управления в ListView
Добрый вечер! Мне хотелось бы поместить ComboBox внутрь одной из ячеек ListView. Это как-то можно сделать? Спасибо.

Загрузить в переменную элемент управления
1. Есть несколько пользовательских элементов управления. 2. Есть переменная page As UserControl 3. Нужно сделать так, чтобы в форме...

Установить фокус на элемент управления
Среда Visual Basic STUDIO’2010 Professional Как поставить фокус на тот же контрл MaskedTextBox В который пользователь ввёл...

Нужен элемент управления - стрелочный датчик
Существует ли среди элементов управления net элемент, реализующий стрелочный измерительный прибор? На VB-6 пользовался элементом OCX...

Элемент управления WebBrowser1 c использованием прокси
Здраствуйте, как подключить прокси из текстбоксов для элемента управления WebBrowser1 Заранее спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru