Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 1
Регистрация: 03.10.2013
Сообщений: 11

Занести процедуры класса в список и вызывать при необходимости

24.03.2014, 19:35. Показов 1138. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени! Есть вопрос, но ответов не нахожу,
такой вопрос :
занести кнопки или пикбоксы в аррайлист , и затем в цикле ими управлять можно,
а можно ли каким-то образом занести в лист SUBы , для которых нет на форме соответствующих
контролов , но в коде они работают простым перечислением
VB.NET
1
(Draw001( ) : Draw002( ) : ...,Draw050( )
и т.д. )
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Draw001( )
............................................
End Sub
 
Private Sub Draw002( )
...........................................
End Sub
............................................
............................................
Private Sub Draw050( )
............................................
End Sub

как их занести в лист вот таким образом :
VB.NET
1
 index = index + 1 : ArrList.Insert(index,Draw002( ) )
а затем над ними измываться в цикле ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2014, 19:35
Ответы с готовыми решениями:

Сохранить список массивов в стрим и затем при необходимости прочитать нужный элемент
Хочу сохранить список массивов в стрим и затем при необходимости прочитать нужную элемент(Суть простоя. Данные хранятся в TreeView и...

Создать объект внутри класса, который может вызывать функцию этого класса
Ребята помогите уже несколько дней мучаюсь. Хочу сделать программу в консоле демонстрации работы лифта в здании 2 этажа. Сделал класс...

как сделать и вызывать процедуры БД?
собственно сабж, база майскуль, надо сделать процедуры в самой базе, а не описывать через программу, а потом по именам процедур уже...

5
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
24.03.2014, 19:56
Обратиться к методу по имени:
VB.NET
1
2
3
4
5
6
7
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        CallByName(Me, "Test", CallType.Method)
    End Sub
 
    Sub Test()
        MsgBox("")
    End Sub
Имена методов можно занести в список заранее.
0
1 / 1 / 1
Регистрация: 03.10.2013
Сообщений: 11
24.03.2014, 22:19  [ТС]
УВ.Памирыч ,да в одном экземпляре можно обратится к процедуре и так , а как быть с несколькими?
На форме 3 кнопки Button1,2,3 & PB1-Picturebox , по одной работает , а две нет.

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Public Class Form1
    Dim points As Point()
    Dim g As Graphics
    Dim lay As Bitmap
    ' Dim text() As Object '' String '''' КАк?
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        lay = New Bitmap(PB1.Width, PB1.Height, Imaging.PixelFormat.Format32bppArgb)
        g = Graphics.FromImage(lay)
        ' text = {"Test", "Test2"}
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        CallByName(Me, "Test", CallType.Method)
        PB1.Image = lay
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        CallByName(Me, "Test2", CallType.Method)
        PB1.Image = lay
    End Sub
 
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        CallByName(Me, "Test", "Test2", CallType.Method) '' не вариант?
 
        'For i As Integer = 0 To 1   '' и так не обратится 
        '    text(i)
        'Next
    End Sub
    Sub Test()
        points = {New Point(432, 381), New Point(130, 181), New Point(230, 205), New Point(292, 205)}
        g.DrawLines(New Pen(New SolidBrush(Color.Red), 8), points)
    End Sub
    Sub Test2()
 
        points = {New Point(103, 181), New Point(230, 281), New Point(330, 305), New Point(192, 205)}
        g.DrawLines(New Pen(New SolidBrush(Color.Green), 8), points)
    End Sub
End Class
За внимание благодарю.

Добавлено через 6 минут
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
25.03.2014, 06:10
Цитата Сообщение от aynom Посмотреть сообщение
VB.NET
1
CallByName(Me, "Test", "Test2", CallType.Method) '' не вариант?
Не-а

Цитата Сообщение от aynom Посмотреть сообщение
VB.NET
1
For i As Integer = 0 To 1 '' и так не обратится
А вот так обратиться можно:
VB.NET
1
2
3
        For i As Integer = 1 To 2
            CallByName(Me, "Test" & i, CallType.Method)
        Next
2
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
25.03.2014, 08:24
Лучший ответ Сообщение было отмечено aynom как решение

Решение

Может такой вариант?
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
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
49
50
51
52
53
54
55
56
57
58
59
Public Class Form1
    Delegate Sub Subroutine(ByVal o As Object)
    Private ArList As List(Of Subroutine)
    Private Obj() As Object = {"String", 10, New Pen(Color.Green, 1), Nothing}
 
    Private nud1 As NumericUpDown
    Private button1 As Button
 
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ArList = New List(Of Subroutine)
 
        ArList.Add(AddressOf Sub0)
        ArList.Add(AddressOf Sub1)
        ArList.Add(AddressOf Sub2)
        ArList.Add(AddressOf Sub3)
 
        nud1 = New NumericUpDown With {.Location = New Point(10, 10), _
                                           .Size = New Size(75, 20), _
                                           .Maximum = ArList.Count - 1, _
                                           .Value = 0}
        Me.Controls.Add(nud1)
 
        button1 = New Button With {.Location = New Point(10, 50), _
                                 .Size = New Size(75, 25), _
                                 .Text = "Click"}
        Me.Controls.Add(button1)
        AddHandler button1.Click, AddressOf button1_Click
    End Sub
 
    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        ArList.Item(nud1.Value).Method.Invoke(Me, New Object() {Obj(nud1.Value)})
    End Sub
 
    Private Sub Sub0(ByVal o As Object)
        MsgBox("Sub0  " & o.ToString)
    End Sub
 
    Private Sub Sub1(ByVal o As Object)
        MsgBox("Sub1   " & o.ToString)
    End Sub
 
    Private Sub Sub2(ByVal o As Object)
        Dim p As Pen = TryCast(o, Pen)
        If p IsNot Nothing Then
            MsgBox("Sub2  " & p.Color.ToString)
 
        Else
            MsgBox("Sub2  " & "Is Not Pen")
 
        End If
    End Sub
 
    Private Sub Sub3(ByVal o As Object)
         MsgBox("Sub3  ")
         Dim a As Integer
         a = Int(1 / 0)
     End Sub
End Class
2
1 / 1 / 1
Регистрация: 03.10.2013
Сообщений: 11
25.03.2014, 18:09  [ТС]
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Памирыч Посмотреть сообщение
А вот так обратиться можно:
VB.NET
1
2
3
For i As Integer = 1 To 2
 CallByName(Me, "Test" & i, CallType.Method)
 Next
+
Цитата Сообщение от Petr_S Посмотреть сообщение
VB.NET
1
ArList.Item(nud1.Value).Method.Invoke(Me, New Object() {Obj(nud1.Value)})
=
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Public Class Form1
    Dim points As Point()
    Dim g As Graphics
    Dim lay As Bitmap
    Dim Picbox As PictureBox
    Delegate Sub Subroutine(ByVal o As Object)
    Private Arr As List(Of Subroutine)
    Private Obj() As Object = {"", 0, New Pen(Color.Green, 1), Nothing}
 
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Arr = New List(Of Subroutine)
 
        Picbox = New PictureBox With {.Location = New Point(0, 0), _
                                          .Size = New Size(300, 300)}
        Me.Controls.Add(Picbox)
 
        lay = New Bitmap(Picbox.Width, Picbox.Height, Imaging.PixelFormat.Format32bppArgb)
        g = Graphics.FromImage(lay)
        Picbox.Image = lay
        Arr.Add(AddressOf Test1)
        Arr.Add(AddressOf Test2)
        Arr.Add(AddressOf Test3)
 
        For i As Object = 0 To Arr.Count - 1
            Arr.Item(i).Method.Invoke(Me, New Object() {Obj(i)})
        Next
    End Sub
 
    Sub Test1()
        points = {New Point(132, 181), New Point(130, 181), New Point(230, 205), New Point(192, 105)}
        g.DrawLines(New Pen(New SolidBrush(Color.Red), 8), points)
    End Sub
    Sub Test2()
 
        points = {New Point(3, 281), New Point(230, 281), New Point(230, 205), New Point(292, 205)}
        g.DrawLines(New Pen(New SolidBrush(Color.Green), 8), points)
    End Sub
    Sub Test3()
 
        points = {New Point(3, 91), New Point(190, 191), New Point(250, 225), New Point(399, 395)}
        g.DrawLines(New Pen(New SolidBrush(Color.Blue), 8), points)
    End Sub
 
End Class
Классический получился случай : два лаконичных точных ответа
и вышло из них отличное решение , толкать Subы можно из любого места программы
Arr.Add(AddressOf Sub)
небеспокоясь об индексе,и проигрывать полученную сборку без проблем!
Полное ощущение открытия!
Спасибо за понимание Обоим в полной мере.
Думаю эта страничка пригодится многим,можно закрыть тему,
она исчерпывающе освещена.

Добавлено через 1 минуту
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2014, 18:09
Помогаю со студенческими работами здесь

Как вызывать различные процедуры по одному событию?
Не подскажите как решить в VB Несколько различных классов содержат одну и ту же форму, эта форма вызывается из содержащего ее класса....

Можно ли процедуры вынести в отдельный файл и вызывать в основной программе
У меня есть некоторая программа с процедурами и функциями. Вопрос, можно ли процедуры вынести в отдельный файл и вызывать в основной...

Как правильно вызывать конструктор шаблонного класса?
Как правильно вызывать конструктор класса? template <class T> class A{ T *v; int dim; public: A(T *a,int n); }; ...

Можно ли Конструктор и Деструктор вызывать как метод класса?
Собственно вопрос: можно ли Конструктор и Деструктор вызывать вручную, как обычный метод класса? Например, я хочу управлять...

Не работает метод, если вызывать его не из род. класса
Добрый день. Проблема такова. Стоит задача: поиск слова в тексте. Текст этот находится в richtextbox. Что я делаю: 1. Разбиваю текст...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru