Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 24.10.2020
Сообщений: 23
.NET 4.x

Как сделать что бы пользовательский элемент объявленный в проекте мог быть независим от формы?

13.01.2021, 11:19. Показов 3079. Ответов 11

Студворк — интернет-сервис помощи студентам
Добрый день Уважаемые форумчане!


1.Создаю пользовательский элемент (Class Ячейка)
2.В конструкторе добавляю кнопку Button 1
3.На форме создаю коллекцию ArrayList
Ячейка AS ArrayList
4.В коде формы создаю класс Class1 для делегата
VB.NET
1
2
3
4
5
Public Class Class1
        Public Sub Sub1(ByVal x As Integer)
           создание(x)
        End Sub
    End Class
5.Экземпляр делегата DelegateTest() помещаем под кнопку Ячейка. Button 1
Protected Sub DelegateTest()
VB.NET
1
2
3
4
5
6
Dim c1 As New class1
        ' Create an instance of the delegate.
        Dim as MySubDelegate = AddressOf c1.Sub1
        ' Call the method.
        c1.Invoke(номер)
    End Sub
6. в событии Load_Form создаем экземпляр коллекции Ячейка(0)
VB.NET
1
2
3
Ячейка.Add(New Ячейка)
        Ячейка (0).номер = 0
        Controls.Add(Ячейка (0))
Задача заключается в добавлении новой ячейки в ArrayList и на форму , под ячейку на которой была нажата кнопка.
ПРОБЛЕМ НЕТ- ВСЕ ДОБАВЛЯЕТСЯ ОТЛИЧНО!
Теперь необходимо создать пользовательский элемент (класс) Участок, и перенести туда все что было написано в форме
И НАЧИНАЕТСЯ «ЛЫЖНАЯ ГОНКА»
Вложенный Class 1 перестает видеть переменные и процедуры в классе Участок

Добавлено через 1 час 41 минуту
Вообщем-то вопрос как сделать что бы пользовательский элемент объявленный в проекте мог быть независим от формы?
Получается что все идет через форму
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.01.2021, 11:19
Ответы с готовыми решениями:

Как сделать, что бы документ не мог быть проведен дважды?
Народ, что не правильно, нужно сделать, чтобы документ не проводился дважды. То есть, если он проведен, то перепроводить его нельзя было...

Как сделать запрет закрытия формы, так что бы юзер не мог закрыть, но программно можно
alt-f4, через диспетчер и т.д. форма не закрывалась, а если в коде написать Close() то закрылась. Мне нужно что бы когда пользователь нажал...

Как в программе сделать чтобы результат мог быть не целым ?
#include <iostream.h> int pop(int* first,int* last) { int sum=0; for(; first!=last; ++first) sum+= *first; return...

11
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18291 / 14214 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
13.01.2021, 12:19
Цитата Сообщение от НикаМ Посмотреть сообщение
В коде формы создаю класс Class1 для делегата
VB.NET
1
2
3
4
5
Public Class Class1
        Public Sub Sub1(ByVal x As Integer)
           создание(x)
        End Sub
    End Class
Где находится метод создание? Зачем вообще создавать метод который только вызывает другой с такой же сигнатурой?

Цитата Сообщение от НикаМ Посмотреть сообщение
На форме создаю коллекцию ArrayList
Почему именно ArrayList а не List(Of Ячейка)? Планируется хранить в ней разные типы?

Добавлено через 1 минуту
Цитата Сообщение от НикаМ Посмотреть сообщение
Теперь необходимо создать пользовательский элемент (класс) Участок, и перенести туда все что было написано в форме
И НАЧИНАЕТСЯ «ЛЫЖНАЯ ГОНКА»
Возможно стоит зайти с другой стороны и спроектировать код начиная с элементов управления которые уже добавлять на форму.
0
0 / 0 / 0
Регистрация: 24.10.2020
Сообщений: 23
13.01.2021, 14:36  [ТС]
Добрый день OwenGlendower!
Это метод создание() сейчас находится в новом пользовательском элементе Маршрут

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Sub создание(ByVal объектВызова As Integer)
 
        Form1.Счетчик = Form1.Счетчик + 1
 
        Маршрут.Insert((объектВызова + 1), New маршрут)
        Маршрут(объектВызова + 1).индекс = Form1.Счетчик
        Маршрут(объектВызова + 1).номер = объектВызова + 1
        Me.Controls.Add(Маршрут(объектВызова + 1))
 
 
        Перестроение()
 
    End Sub
Смысл всего действия заключается в следующем:
1. Форма это у нас объект карта – существует в единичном экземпляре
Карте (Форме) может принадлежать только Слой (объект) (там можно объявить List (Of Слой)), при этом на Карте (форме) обязательно должен быть один Слой ( объект) (создаем его при загрузке формы), Далее могут добавляется еще Слой(объекты) в коллекцию
2. Слой (Объект) -сделан из UserControl, В него может входить только Маршрут(объект). Здесь тоже можно использовать List (Of Маршрут), при загрузки слоя обязательно создается хотя бы один маршрут
3. Маршрут (Объект) - сделан из UserControl, в него может входить Участок(объект) и Слой (Объект), здесь предполагается использовать ArrayList. При загрузке обязательно должен быть один участок (объект), далее могут добавляется как Участок(Объект), так и Слой(Объект)
4. Участок(Объект)- сделан из UserControl, В него может входить только Ячейка(объект). При загрузке должна быть обязательно одна, далее добавляются еще
5. Ячейка(Объект)- сделан из UserControl. Имеет Label1(создан сразу в конструкторе по умолчанию) к которому предполагается подключить контекстное меню с вариантами выбора, пока на этапе разработки установлена кнопка Button1. Вот это контекстное меню и может добавить:
-В Участок(объект) еще одну Ячейку(объект), при чем в тот участок, и под ту ячейку с которой было вызвано контекстное меню
-В Маршрут (объект), в котором находится Участок, в котором находится ячейка вызова добавить еще один Слой(Объект) (участки формируются сами в зависимости от наличия Слой(Объект))
-В карту(форму) добавить еще один Слой(Объект)

Все вложения, перестроения, создания элементов -получается на отлично все работает , но вот именно из контекстного меню необходимые добавления в объектах сделать не выходит

P.S Возможна, подмена понятий, заранее извиняюсь и постараюсь разъяснить, не казните сразу
P.P.S Слова и выражения : Добавить, Может Входить, Входит – это Controls.Add()

Добавлено через 1 час 28 минут
Если необходимо, то могу попробовать начертить порядок вложений?
0
0 / 0 / 0
Регистрация: 24.10.2020
Сообщений: 23
13.01.2021, 19:22  [ТС]
Графическое представление топологии объектов
Вложения
Тип файла: pdf Фрагмент.pdf (25.6 Кб, 18 просмотров)
0
0 / 0 / 0
Регистрация: 24.10.2020
Сообщений: 23
13.01.2021, 19:36  [ТС]
Через форму все строится хорошо и здорово, но глубина вложение Объектов в Объекты может быть любая, других подходов к вопросу у меня пока нет может Вы что то посоветуете?
0
0 / 0 / 0
Регистрация: 24.10.2020
Сообщений: 23
13.01.2021, 19:40  [ТС]
Примерно так
Миниатюры
Как сделать что бы пользовательский элемент объявленный в проекте мог быть независим от формы?  
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
17.01.2021, 19:29
Лучший ответ Сообщение было отмечено НикаМ как решение

Решение

Уважаемая НикаМ, к сожалению, из вашего описания очень трудно сформировать правильное представление о вашей задаче, м.б. поэтому нет никаких откликов на ваш вопрос. Предлагаю вам тестовый проект в моем понимании вашей задачи. Надеюсь, он будет полезен и хоть чем-то поможет.
Миниатюры
Как сделать что бы пользовательский элемент объявленный в проекте мог быть независим от формы?  
Вложения
Тип файла: rar tst0121_1.rar (18.8 Кб, 4 просмотров)
2
0 / 0 / 0
Регистрация: 24.10.2020
Сообщений: 23
18.01.2021, 12:14  [ТС]
Ovva, это просто и гениально, буду разбираться.
Просто есть задумка, какой- то небольшой опыт работы в VB6, столетней давности, и дикое желание реализовать задуманное!
0
14 / 14 / 0
Регистрация: 24.09.2015
Сообщений: 209
18.01.2021, 15:29
Можно создать словарь Dictionary(of T) с типом ячейки или того типа, что вам требуется и работать через него.
Словарь объявить на уровне проекта или том уровне где он требуется и работать с ним.
Либо же, если в каждой ячейке нужно иметь доступ к родительскому и к дочернему контролу, то создаёте свойство типа самого контрола и при инициализации нового экземпляра передаёте в конструктор эти контролы или передаёте отдельно, как вам удобно.
Таким образом из любого контрола вы сможете провалиться например через рекурсию до нужного уровня и работать с нужным контролом.
Если я конечно правильно понял вашу задачу.

Добавлено через 31 минуту
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Class ControlBase
 
    Private _ChildControl As ControlBase
    Private _BeforeControl As ControlBase
    Private _ParrentCntrol As ControlBase
 
    Public WriteOnly Property ChildControl As ControlBase
        Set(value As ControlBase)
 
            _ChildControl = value
            If _ChildControl._ParrentCntrol Is Nothing Then _ChildControl._ParrentCntrol = Me
        End Set
    End Property
    
    Public Property BeforeControl As ControlBase
        Get
            Return _BeforeControl
        End Get
        Set(ByVal value As ControlBase)
            _BeforeControl = value
        End Set
    End Property
End Class
Добавлено через 1 час 5 минут
Дальше добавляешь в коллекцию контролов формы, задав при этом координаты контролов и прочие требуемые свойства.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
    Private Sub Drive_Click(sender As Object, e As EventArgs) Handles Drive.Click
        Using FormAmpl As New FormAddData()
            Dim Manuf As New ControlBase()
            Dim Model As New ControlBase()
 
            Manuf.ChildControl = Model
 
            FormAmpl.Controls.Add(Manuf)
            FormAmpl.Controls.Add(Model)
 
            FormAmpl.ShowDialog()
        End Using
    End Sub
1
0 / 0 / 0
Регистрация: 24.10.2020
Сообщений: 23
18.01.2021, 22:48  [ТС]
Спасибо Евгений! Осмысливаю

Добавлено через 7 минут
Интерплитирую под свою задачу.
Интересно что, у Вас, Уважаемые Гуру, уходит одна- две коротеньких строчки, на то что у меня уходит целый день и 40- ххх длинющих строк с кривым результатом.
Видимо мои познания в программировании сильно устарели!
0
14 / 14 / 0
Регистрация: 24.09.2015
Сообщений: 209
18.01.2021, 23:01
НикаМ, ну нет, тут вы не правы.
Данный пример я привёл из реального своего проекта и чтобы прийти к такому решению, мне понадобился целый день или полтора и множество проб и ошибок.
0
0 / 0 / 0
Регистрация: 24.10.2020
Сообщений: 23
18.01.2021, 23:21  [ТС]
С моей задачей понадобятся видимо годы)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2021, 23:21
Помогаю со студенческими работами здесь

Как наследовать/создать пользовательский элемент управления формы?
Занимаюсь довольно интересной для себя работой, по написанию одной утилиты для своего учебного учреждения. Я студент третьего курса,...

как сделать, что бы посетитель мог скачать файл с сайта
как сделать так, что бы посетитель мог скачать вордовский файл со страницы сайта?

Как сделать что-бы ToolBar мог менять размеры иконок?
В WinZip если запустить программу можно увидеть что тул бар имеет иконки 32x32 я выставил так-же. В тот-же момент мы счелкаем правой...

Как сделать что бы параметры метода мог вводить пользователь
Подскажите пожалуйста, как сделать что бы параметры метода мог вводить пользователь. Вот пример программы, где заранее неизвестные...

Как сделать что бы пользователь не мог добавлять сам себя в друзья?
Как сделать так что бы пользователь не мог добавлять сам себя в друзья,то есть не мог вносить в колонки свой id?


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru