Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/32: Рейтинг темы: голосов - 32, средняя оценка - 4.56
7 / 7 / 0
Регистрация: 21.12.2016
Сообщений: 152

Как получить INDEX контрола в массиве контролов

10.11.2019, 13:51. Показов 7546. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форуме, ответа не нашёл. А те, что находил, разобраться не смог.

Есть массив кнопок на форме Buttons. Допустим 10 штук.
Раньше в VB6 у конрола был Index и по нему можно было обратиться к конкретному контролу.

Сейчас, я не знаю, как при нажатии на Button(5), узнать что произошло нажатие кнопки и получить её Index=5?

нашёл вот такую структуру:
VB.NET
1
2
3
4
5
Dim I as Integer
 
For I = 0 To 10
       AddHandler button(I).Click, AddressOf ButtonClick
Next I
и потом, в эту процедуру, должна возвращаться информация о нажатии.
VB.NET
1
2
3
Private Sub ButtonClick_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdOK.Click
 
End Sub
Но как в этой процедуре, получить порядковый Index Кнопки Button в массиве?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2019, 13:51
Ответы с готовыми решениями:

Как сделать группу контролов членами коллекции другого контрола?
Всем здравствуйте. На форме есть группа Label с различными именами и PictureBox. Задача сделать все Label членами коллекции PictureВox. ...

Массив контролов, событие для контрола
Продолжаю разбираться с массивами контролов. Предположим, я сканирую папку, получаю список файлов и создаю массив из Button для...

Как получить данные из контрола
Добрый день. Подскажите пожалуйста. Добавила контролер в visual studio. прикрепила файл рисунка как я это сделала. Получила контроллер в...

27
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
12.11.2019, 12:59
Студворк — интернет-сервис помощи студентам
Чему равен Array1.Count, до ReDim Preserve Array1?
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
12.11.2019, 13:12
Лучший ответ Сообщение было отмечено Memfivosfey как решение

Решение

Цитата Сообщение от Memfivosfey Посмотреть сообщение
ReDim Preserve Array1(eBegin + eAdd.Count)
Если сумма eBegin + eAdd.Count равна единице, то естественно, что получившийся массив имеет длину два: так как в скобках указывается верхняя граница, а нижняя всегда 0.

Эта конструкция создаст массив из двух элементов с индексами 0 и 1:
VB.NET
1
ReDim Preserve Array1(1)
1
7 / 7 / 0
Регистрация: 21.12.2016
Сообщений: 152
12.11.2019, 13:22  [ТС]
Чему равен Array1.Count, до ReDim Preserve Array1?
ничему не равен. Он даже не объявлен.

Эта конструкция создаст массив из двух элементов с индексами 0 и 1:
Но ведь eAdd так же массив с одним Элементом. И имеет размерность 1
Но когда я создаю второй массив размерностью в 1 элемент, то создаётся 2 элемента?
Тоесть, для того, что бы мне получить массив с размерностью в 1 элемент, мне нужно создавать Array(0)?
если я верно понял?
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
12.11.2019, 13:24
Цитата Сообщение от Memfivosfey Посмотреть сообщение
Тоесть, для того, что бы мне получить массив с размерностью в 1 элемент, мне нужно создавать Array(0)
Да.
В скобках указывается не количество элементов в массиве, а верхняя граница массива.
0
7 / 7 / 0
Регистрация: 21.12.2016
Сообщений: 152
12.11.2019, 16:00  [ТС]
Кажись понял. Путаница состоит в том, что счёт элементов идёт с 0 индекса. Тоесть 0 индекс массива - это 1 элемент уже. Соответственно 1 индекс массива - это 2 элемент. Медленно доходит...

Добавлено через 57 секунд
Спасибо за разъяснение... А то я уж подумал, что баг обнаружил)))

Добавлено через 2 часа 34 минуты
Ребят, ещё подскажите пожалуйста.
Возник вопрос, по первому посту.
Не могу получить индекс.
Я сделал вот так:
VB.NET
1
2
3
4
5
Dim I as Integer
 
For I = 0 To 10
       AddHandler button(I).Click, AddressOf ButtonClick
Next I
И так:
VB.NET
1
2
3
Private Sub ButtonClick_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
 
End Sub
Всё работает, великолепно.

Только проблема теперь в другом.
В коде выше, я передаю КЛИК в Button.Click и всё работает при нажатии на кнопку.

Но теперь, я добавил PopupMenu(ContextMenuStrip) на форму.
И вызываю его, по нажатию на Button(I) правой копки мыши.

В этом случае, ButtonClick не срабатывает, нужно MouseDown
Я добавил
VB.NET
1
AddHandler eButton(I).MouseDown, AddressOf ButtonMouseDown
и вот это:
VB.NET
1
2
3
4
Sub ButtonMouseDown(sender As Object, e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Right Then
      mnuPopup.Show(CType(sender, Control), e.Location)
End If
Но теперь, мне нужно передать INDEX нажатой кнопки в ContextMenuStrip на форме.

В эту:
VB.NET
1
2
3
4
Private Sub УдалитьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles УдалитьToolStripMenuItem.Click
 
        Dim bt As Button = CType(sender, Button)
        MsgBox("Нажата кнопка с индексом " & bt.Tag)
Пытаюсь сделать это через sender, не выходит.
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
12.11.2019, 16:25
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Memfivosfey, Потому что в данном случае sender уже не кнопка, а ToolStripMenuItem, элемент ContextMenuStrip.
VB.NET
1
2
3
 Private Sub УдалитьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles УдалитьToolStripMenuItem.Click
        MsgBox(ContextMenuStrip1.SourceControl.Tag)
    End Sub
2
1550 / 1527 / 325
Регистрация: 03.10.2012
Сообщений: 1,558
12.11.2019, 16:48
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Цитата Сообщение от Memfivosfey Посмотреть сообщение
Пытаюсь сделать это через sender, не выходит.
VB.NET
1
2
3
Private Sub УдалитьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles УдалитьToolStripMenuItem.Click
     MsgBox("Нажата кнопка с индексом " & sender.Owner.SourceControl.Tag)
End Sub
1
7 / 7 / 0
Регистрация: 21.12.2016
Сообщений: 152
14.11.2019, 21:39  [ТС]
Всем спасибо огромное за помощь! Работает как часики.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2019, 21:39

Как получить список контролов диалога?
Здрасти! Как получить список контролов диалога? Спасибо

Как получить hWnd контрола TEdit?
Как получить hWnd контрола зная hWnd окна которому он прнадлежит и тип(TEdit)?

Как получить HTML контент ASP контрола?
После некоторых скитаний по MSDN написал примерно следующее... public static string GetHTMLContent(Control a_Control) { ...

Как получить доступ к методам найденого контрола
Допустим я нашол контрол на форме так foreach (Control ctrl in Controls) { if...

Как получить содержимое фрейма из контрола WebBrowser?
Кстати, на Delphi таже самая история. Так что пока нет выхода? Может всё же "View Source" как нибудь использовать?


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru