powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Единый AddHandler для всех Control-ов созданных динамически часть 2
1 сообщений из 1, страница 1 из 1
Единый AddHandler для всех Control-ов созданных динамически часть 2
    #39357462
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Периодически мучаю тему с созданием элементов управления динамически.
И все вполне годно получается, но есть одна большая проблема. А именно, как обработать события от этих контролов при этом не добавляя каждый раз ручками код обработчика событий допустим в форму-контейнер для этого динамического контрола.
Чувствую что надо чтото мудрить с классами и интерфейсами но в этом не очень силен. Может кто подскажет фаблон решения?

Вот код для создаваемого PictureBox
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    'Добавляем программмно в проект новый PictureBox
    'Ползунок выбора значения
    Public Sub CreateNewPictureBox(ByVal iName As String, _
                                   ByVal ParentForm As Object, _
                                   ByVal LocationX As Integer, _
                                   ByVal LocationY As Integer, _
                                   ByVal TBWidth As Integer, _
                                   ByVal TBHeight As Integer, _
                                   ByRef oPictureBox As PictureBox)
        Dim iPictureBox As New PictureBox ' НОВЫЙ элемент DataGridView
        oPictureBox = iPictureBox

        If CreateControlWithName(ParentForm, iName) = False Then
            AddHandler iPictureBox.SizeChanged, AddressOf ParentForm.iPictureBox_SizeChanged
            AddHandler iPictureBox.Click, AddressOf ParentForm.iPictureBox_Click
            AddHandler iPictureBox.MouseMove, AddressOf ParentForm.iPictureBox_MouseMove
            AddHandler iPictureBox.MouseDown, AddressOf ParentForm.iPictureBox_MouseDown
            AddHandler iPictureBox.MouseUp, AddressOf ParentForm.iPictureBox_MouseUp
            ParentForm.Controls.Add(iPictureBox)
        Else
        End If

        iPictureBox.Name = iName
        iPictureBox.Location = New System.Drawing.Point(LocationX, LocationY)
        iPictureBox.Size = New System.Drawing.Size(TBWidth, TBHeight)

    End Sub



Для Form
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
    'Добавляем программно в проект новую форму
    Public Sub CreateNewFORM(ByVal Name As String, _
                             ByVal Text As String, _
                             ByVal Width As Integer, _
                             ByVal Height As Integer, _
                             ByVal Local_X As Integer, _
                             ByVal Local_Y As Integer, _
                             ByVal TextColor_R As Integer, _
                             ByVal TextColor_G As Integer, _
                             ByVal TextColor_B As Integer, _
                             ByVal BackColor_R As Integer, _
                             ByVal BackColor_G As Integer, _
                             ByVal BackColor_B As Integer, _
                             ByVal iMinimizeBox As Boolean, _
                             ByVal iMaximizeBox As Boolean, _
                             ByVal ParentForm As Form, _
                             ByRef oForm As Form)

        Dim iForm As New System.Windows.Forms.Form
        iForm.Name = String.Format("Form{0}", Name)
        If ParentForm.IsMdiContainer Then iForm.MdiParent = ParentForm

        iForm.Show()
        oForm = iForm
        'размеры формы
        iForm.Size = New System.Drawing.Size(Width, Height)
        'iForm.Width = Width
        'iForm.Height = Height
        'координаты расположения формы
        iForm.Location = New System.Drawing.Point(Local_X, Local_Y)
        'iForm.Top = Local_X
        'iForm.Left = Local_Y
        'озаглавливание текста
        iForm.Text = Text
        'убираем иконку формы
        iForm.ShowIcon = False
        'задаём цвет текста в форме при помощи компонентов RGB
        iForm.ForeColor = Color.FromArgb(TextColor_R, TextColor_G, TextColor_B)
        'задаём цвет формы при помощи компонентов RGB
        iForm.BackColor = Color.FromArgb(BackColor_R, BackColor_G, BackColor_B)
        'определяем наличие кнопки минимизации формы
        iForm.MinimizeBox = iMinimizeBox
        'определяем наличие кнопки минимизации формы
        iForm.MaximizeBox = iMaximizeBox

        'AddHandler iForm.Resize, AddressOf FormSDM_Resize

    End Sub



Сначала создаётся Form а потом на неё добавляется PictureBox.
Раньше я добавлял текст кода обработчика событий в Form который создавал сам же руками.
В выше описанном случае я так сделать не могу.
Хочется чтобы весь код лежал в одном универсальном модуле или классе...

Вот код обработчика событий для PictureBox который я добавляю вручную.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#Region "События iPictureBox"
    Public Sub iPictureBox_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'Handles oPictureBox.Click
    End Sub
    Public Sub iPictureBox_SizeChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) ' Handles MyBase.Resize
    End Sub
    Public Sub iPictureBox_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) ' Handles PictureBox1.MouseMove
    End Sub
    Public Sub iPictureBox_MouseDown(ByVal sender As Object, ByVal e As System.EventArgs) ' Handles PictureBox1.MouseDown
    End Sub
    Public Sub iPictureBox_MouseUp(ByVal sender As Object, ByVal e As System.EventArgs) ' Handles PictureBox1.MouseUp
    End Sub
#End Region



Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Единый AddHandler для всех Control-ов созданных динамически часть 2
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]