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

Программный доступ к динамически созданным элементам

14.05.2012, 15:58. Показов 1893. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток!

Очередная проблемка:

Создаю динамически несколько кнопок:
VB.NET
1
2
3
4
5
6
Dim Button As New Button
        Button.Name = "N" & Panel1.Controls.Count.ToString
        Button.Text = Panel1.Controls.Count.ToString
(убрал лишнее: размер, шрифт, положение и т.п.
        AddHandler Button.Click, AddressOf BttnConsClick
        Panel1.Controls.Add(Button)
В результате имеем, к примеру несколько кнопок с .Name N1...N5 и текстом 1...5

Узнать по которой нажали, примерно так:
VB.NET
1
2
3
4
5
6
7
8
9
10
Private Sub BttnConsClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        
        Dim Button As Button = CType(sender, Button)
        SELECT CASE Button.Name
              Case "N1"
                     Button.BackColor = Color.LightPink
              и т.д.
        End Select
 
    End Sub
Каким образом можно программно "нажать" нужную кнопку?

Пробовал так:
VB.NET
1
2
3
4
Dim mySender As New Button
        mySender.Name = "N1"
        mySender.Text = "1"
        BttnConsClick(mySender, e)
- не получается (не ставится .BackColor как проверка нажатия)

Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2012, 15:58
Ответы с готовыми решениями:

Присвоение действия динамически созданным элементам
Здравствуйте уважаемые программисты и форумчане! Долгое время бился над одной проблемой,...

Обращение к динамически созданным элементам WPF
Доброго времени суток! Разбираюсь с WPF... Создал сервис, который генерирует разметку XAML....

Доступ к элементам созданным в дизайнере из .cpp файла
Здравствуйте, пытаюсь разобраться и дополнить чужой код. В дизайнере на форме определены layout и...

Как обращаться к элементам созданным программно
Как обратиться к элементу, который добавлен кодом ? ComboBox comboBox4 = new ComboBox(); ...

7
1485 / 580 / 106
Регистрация: 26.03.2012
Сообщений: 1,028
14.05.2012, 16:13 2
Зачем огород городить? В кнопке пропиши вызов функции. А в место программного нажатия вызывай ту же функцию напрямую
0
8 / 8 / 0
Регистрация: 09.02.2012
Сообщений: 48
14.05.2012, 19:24  [ТС] 3
Цитата Сообщение от PAnT0P Посмотреть сообщение
Зачем огород городить? В кнопке пропиши вызов функции. А в место программного нажатия вызывай ту же функцию напрямую
Ну, и? Вот же вызов функции:
VB.NET
1
Private Sub BttnConsClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Напиши код, вызывающий нажатие кнопки №5?
0
1485 / 580 / 106
Регистрация: 26.03.2012
Сообщений: 1,028
14.05.2012, 20:46 4
Это не функция, это обработчик события. Делай так:

Добавлено через 11 минут
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
Private Sub BttnConsClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim Button As Button = CType(sender, Button)
    SELECT CASE Button.Name   
        Case "Button1"
            Call PressButton1
        Case "Button2"
            Call PressButton2
        Case "Button3"
            Call PressButton3
        Case "Button4"
            Call PressButton4
        Case "Button5"
            Call PressButton5
    End select
End Sub
 
Private Sub PressButton1
    'Код для кнопки, вместо программного нажатия, напрямую вызываем эту процедуру
End Sub
 
Private Sub PressButton2
    'Код для кнопки, вместо программного нажатия, напрямую вызываем эту процедуру
End Sub
 
Private Sub PressButton3
    'Код для кнопки, вместо программного нажатия, напрямую вызываем эту процедуру
End Sub
 
Private Sub PressButton4
    'Код для кнопки, вместо программного нажатия, напрямую вызываем эту процедуру
End Sub
 
Private Sub PressButton5
    'Код для кнопки, вместо программного нажатия, напрямую вызываем эту процедуру
End Sub
0
8 / 8 / 0
Регистрация: 09.02.2012
Сообщений: 48
14.05.2012, 22:28  [ТС] 5
Так и я могу. Число 5 (количество кнопок) - это был просто пример.
При таком подходе вообще можно делать напрямую:
Вместо (для всех - одна)
VB.NET
1
AddHandler Button.Click, AddressOf BttnConsClick
делать (каждой - персональная)
VB.NET
1
AddHandler Button.Click, AddressOf PressButton1...N
А теперь представь, что количество кнопок от 1 до N, где N - неизвестное число. Что, туеву хучу Private Sub PressButton??? закодить?

Т.о. вопрос остается: КАК вызвать программное нажатие N-й кнопки (т.е. передать "нажатие" в Sub BttnConsClick...)?
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
15.05.2012, 00:02 6
через sender делай - этот параметр все-таки не для красоты стоит в обработчике нажатия кнопки
0
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
15.05.2012, 00:07 7
VB.NET
1
2
Dim btn As Button = Me.Controls("button2")
btn.PerformClick()
Ну, написав Me.Controls я предполагаю, что кнопки находятся непосредственно на форме (т.е. форма - их непосредственный владелец). Если у тебя кнопки на панели Panel1 (судя по коду первого поста), то так и пиши: Panel1.Controls
А сформировать нужный текстовый ключ для отыскания нужного контрола ("button2" в моем примере) труда не составит, надеюсь.
1
8 / 8 / 0
Регистрация: 09.02.2012
Сообщений: 48
15.05.2012, 09:27  [ТС] 8
Цитата Сообщение от Юпатов Дмитрий Посмотреть сообщение
VB.NET
1
2
Dim btn As Button = Me.Controls("button2")
btn.PerformClick()
Ага. Становится теплее Проверю только завтра, но судя по: http://msdn.microsoft.com/ru-r... 90%29.aspx должно сработать.

Добавлено через 9 часов 12 минут
Цитата Сообщение от Юпатов Дмитрий Посмотреть сообщение
VB.NET
1
2
Dim btn As Button = Me.Controls("button2")
btn.PerformClick()
Спасибо! Проверил: работает!
0
15.05.2012, 09:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2012, 09:27
Помогаю со студенческими работами здесь

Обращение к програмно(не в дизайнере) созданным элементам
Label TZtime = new Label();//Создаю новый элемент управления TZtime.Name =...

Клик по созданным через Template элементам
По коллекции ObservableCollection создаются прямоугольники. Как по клику на прямоугольник...

Непонятки с динамически созданным объектом
По клику в чекБоксе динамически создаю кнопку private void...

Обращение к динамически созданным объектам
Подскажите возможно ли получить список элементов созданных в TabControl и обращаться к ним? суть...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru