Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не получается назначить события на массив элементов (или типа массив, динамически созданн) / 14 сообщений из 14, страница 1 из 1
08.07.2017, 00:51
    #39484981
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Хочу создать массив из кнопок 8х8 (обычная шахматная доска). Пробую VB.NET после VB6 и никак не могу подружиться с отсутствием массива элементов. Создать кнопки могу, а вот события назначить что-то не получается.


Код: 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.
Public Class Form1

    Dim WithEvents Btn11, Btn12, Btn13, Btn14, Btn15, Btn16, Btn17, Btn18 As Button


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For x As Int32 = 1 To 8
            For y As Int32 = 1 To 8
                Dim Btn As New Button
                Btn.Visible = True
                Btn.Size = New Size(70, 60)
                Btn.Location = New Point(5 + (x * 70), 5 + (60 * y))
                Btn.Name = "Btn" & y & x
                AddHandler Btn, AddressOf ButtonArr_Click
                Me.Controls.Add(Btn)
            Next y
        Next x
    End Sub


    Private Sub ButtonArr_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn11.Click, Btn12.Click, Btn13.Click, Btn14.Click, Btn15.Click, Btn16.Click, Btn17.Click, Btn18.Click
        'Select Case DirectCast(sender, TextBox).Name
        'Case Btn11.Name : MsgBox("The text in the first TextBox has changed";) 
        'Case Btn12.Name : MsgBox("The text in the second TextBox has changed";) 
        'Case Btn13.Name : MsgBox("The text in the third TextBox has changed";) 
        'End Select
        Stop
    End Sub
End Class
...
Рейтинг: 0 / 0
08.07.2017, 00:55
    #39484982
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Есть на VB6 написанная прога с массивом 60*4 кнопок. там одни кнопки для ввода из сенсорного ПК. Буду в шоке если по проще записи кода не найдется.
...
Рейтинг: 0 / 0
08.07.2017, 01:17
    #39484986
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
О... я молодец. У меня успехи)))

Код: 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.
Public Class Form1

    Private WithEvents Btn11, Btn12, Btn13, Btn14, Btn15, Btn16, Btn17, Btn18 As Button

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For x As Int32 = 1 To 8
            For y As Int32 = 1 To 8
                Dim Btn As New Button
                Btn.Visible = True
                Btn.Size = New Size(70, 60)
                Btn.Location = New Point(5 + (x * 70), 5 + (60 * y))
                Btn.Name = "Btn" & y & x
                AddHandler Btn.Click, AddressOf ButtonArr_Click
                Me.Controls.Add(Btn)
            Next y
        Next x
    End Sub

    Private Sub ButtonArr_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim s As String = sender.Name
        Dim x As Byte = Mid(s, 4, 1), y As Byte = Mid(s, 5, 1)
        MsgBox(x & y)
    End Sub
End Class



Очень даже ничего так. Понравилось писать упрощенно с Dim. Почти как на JS. Посмотрим как VB.NET себя покажет работая с массивами и объектами.
...
Рейтинг: 0 / 0
08.07.2017, 01:18
    #39484987
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Private WithEvents лишнее уже..
...
Рейтинг: 0 / 0
08.07.2017, 01:19
    #39484988
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Все работает
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For x As Int32 = 1 To 8
            For y As Int32 = 1 To 8
                Dim Btn As New Button
                Btn.Visible = True
                Btn.Size = New Size(70, 60)
                Btn.Location = New Point(5 + (x * 70), 5 + (60 * y))
                Btn.Name = "Btn" & y & x
                AddHandler Btn.Click, AddressOf ButtonArr_Click
                Me.Controls.Add(Btn)
            Next y
        Next x
    End Sub

    Private Sub ButtonArr_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim s As String = sender.Name
        Dim x As Byte = Mid(s, 4, 1), y As Byte = Mid(s, 5, 1)
        MsgBox(x & y)
    End Sub
End Class
...
Рейтинг: 0 / 0
08.07.2017, 12:59
    #39485047
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Андрей159Посмотрим как VB.NET себя покажет работая с массивами и объектами.
Вместо массивов обычно удобнее использовать List
...
Рейтинг: 0 / 0
10.07.2017, 17:37
    #39485962
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Cat2Андрей159Посмотрим как VB.NET себя покажет работая с массивами и объектами.
Вместо массивов обычно удобнее использовать List

я не понял. можно где-нибудь посмотреть пример?
...
Рейтинг: 0 / 0
10.07.2017, 19:30
    #39486059
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Андрей159Cat2пропущено...

Вместо массивов обычно удобнее использовать List

я не понял. можно где-нибудь посмотреть пример?
https://msdn.microsoft.com/ru-ru/library/6sh2ey19(v=vs.110).aspx

В первом приближении List - это динамический массив
...
Рейтинг: 0 / 0
11.07.2017, 15:59
    #39486701
WitC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Андрей159 Все работает
Код: vbnet
1.
AddHandler Btn.Click, AddressOf ButtonArr_Click



заметочка.
если вдруг объекты Btn нужно уничтожать раньше чем класс где подвешаны handles,
то учитывай, что сборщик муссора их сможет удалить из памяти только после удаления всех ссылок на них.

Слабая ссылка
...
Рейтинг: 0 / 0
11.07.2017, 16:50
    #39486779
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
WitCАндрей159 Все работает
Код: vbnet
1.
AddHandler Btn.Click, AddressOf ButtonArr_Click




заметочка.
если вдруг объекты Btn нужно уничтожать раньше чем класс где подвешаны handles,
то учитывай, что сборщик муссора их сможет удалить из памяти только после удаления всех ссылок на них.

Слабая ссылка
попутал ты, удалять батоны можно без проблем, т.к. батон имеет ссылку на обработчик, а не наоброт, так что сборщик их сожрёт и так.
...
Рейтинг: 0 / 0
11.07.2017, 23:36
    #39487044
WitC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
pation...удалять батоны можно без проблем, т.к. батон имеет ссылку на обработчик, а не наоброт, так что сборщик их сожрёт и так.

точно, согласен.
...
Рейтинг: 0 / 0
12.07.2017, 20:46
    #39487871
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Сборщик мусора ?
У меня от студии VS 2010 после нескольких десяток запусков в процессах остается очень много процессов с именем IntelliTrace.exe Убивать их очень долго нужно. А занимают они 9гиг файла подкачки. Я офигел.

На VB6 написал киллера и вот так их уничтожаю за секунду:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Command1_Click()
    Dim objWMIService, objProcess, colProcess, strList
    Dim strComputer, strProcessKill
    strComputer = "."
    strProcessKill = "'IntelliTrace.exe'"
    
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcess = objWMIService.ExecQuery("Select * from Win32_Process Where Name = " & strProcessKill)
    For Each objProcess In colProcess
      strList = objProcess.Terminate()
    Next
End Sub



хотя с VB6 никаких проблем никогда подобных не было. А с VB.NET сразу. Есть еще процесс, который называется так как мой проект с добавлением окончания МойПроект.vshost.exe Так он даже не хочет убираться через диспетчер задач. Я его также киллером расстреливаю за секу. Это все через то что я не убираю хенделы?
...
Рейтинг: 0 / 0
12.07.2017, 21:28
    #39487891
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Андрей159Есть еще процесс, который называется так как мой проект с добавлением окончания МойПроект.vshost.exe Так он даже не хочет убираться через диспетчер задач. Я его также киллером расстреливаю за секу. Жестоко...
А если просто галочку снять:
...
Рейтинг: 0 / 0
13.07.2017, 16:03
    #39488535
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается назначить события на массив элементов (или типа массив, динамически созданн)
Андрей159Сборщик мусора ?
У меня от студии VS 2010 после нескольких десяток запусков в процессах остается очень много процессов с именем IntelliTrace.exe Убивать их очень долго нужно. А занимают они 9гиг файла подкачки. Я офигел.

На VB6 написал киллера и вот так их уничтожаю за секунду:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Command1_Click()
    Dim objWMIService, objProcess, colProcess, strList
    Dim strComputer, strProcessKill
    strComputer = "."
    strProcessKill = "'IntelliTrace.exe'"
    
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcess = objWMIService.ExecQuery("Select * from Win32_Process Where Name = " & strProcessKill)
    For Each objProcess In colProcess
      strList = objProcess.Terminate()
    Next
End Sub




хотя с VB6 никаких проблем никогда подобных не было. А с VB.NET сразу. Есть еще процесс, который называется так как мой проект с добавлением окончания МойПроект.vshost.exe Так он даже не хочет убираться через диспетчер задач. Я его также киллером расстреливаю за секу. Это все через то что я не убираю хенделы?
это всё от безблагодатности...
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не получается назначить события на массив элементов (или типа массив, динамически созданн) / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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