как программно вызвать Click

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dismalion
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 06.02.2006 (Пн) 13:57

как программно вызвать Click

Сообщение Dismalion » 03.06.2010 (Чт) 18:25

Здраствуйте!
Если мы добавили контрол при создании формы - то можем сделать вызов click так: Call Check1_Click.
А, например в случае: Me.Controls(controlName), где controlName - имя какого-нидудь чекбокса.
Call не подходит: Click - это событие, а не метод или свойство.
Слышал что можно через WithEvents как-то сделать.
Кто-нибудь с таким сталкивался?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как программно вызвать Click

Сообщение Хакер » 03.06.2010 (Чт) 18:29

то можем сделать вызов click так: Call Check1_Click.

Нет, мы сделаем вызов обработчика, но не Click.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dismalion
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 06.02.2006 (Пн) 13:57

Re: как программно вызвать Click

Сообщение Dismalion » 03.06.2010 (Чт) 18:36

Да, ошибся, вызовем обработчика события Click. Но как в таком случае вызвать Имя_click, где имя получено, например, через

Код: Выделить всё
  Dim ct As Control
  For Each ct In Me.Controls
    If TypeOf ct Is textbox Then
        NameControl= ct.NAME
        'далее нужно вызвать обработчика click
    End If
   Next ct

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как программно вызвать Click

Сообщение Хакер » 03.06.2010 (Чт) 18:54

Нельзя вызвать то, чего нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dismalion
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 06.02.2006 (Пн) 13:57

Re: как программно вызвать Click

Сообщение Dismalion » 04.06.2010 (Пт) 9:25

Почему же нет, на форме расположены 2 textbox. Есть разделы:

Код: Выделить всё
Private Sub Texbox1_Click()
  MsgBox "Start1"
End Sub

Private Sub Texbox2_Click()
  MsgBox "Start2"
End Sub


Я через For Each ct In Me.Controls перебираю все контролы на форме и если нахожу texbox,
то могу получить его имя через ct.Name, в данном случае Texbox1 и Texbox2. Заношу их имена в переменные, допустим tx1 и tx2.
И теперь нужно вызвать Texbox1_Click и Texbox2_Click. Проблем нет, когда их всего 2, пишем:

Код: Выделить всё
Texbox1_Click
Texbox2_Click


Но если их около 50?

Как сделать вызов:

Код: Выделить всё
tx1 & _Сlick
tx2 & _Сlick


Или с такой проблемой только я столкнулся? =)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как программно вызвать Click

Сообщение Хакер » 04.06.2010 (Пт) 9:28

Или с такой проблемой только я столкнулся? =)

Ну как тебе сказать... чтобы это было помягче.

Такая кривая архитектура программы только у тебя.

В данном случае, если обработчики существуют и является членами-методами класса-формы, то вызвать их можно с помощью CallByName. Насчёт области видимости только задуматься прежде.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Dismalion
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 06.02.2006 (Пн) 13:57

Re: как программно вызвать Click

Сообщение Dismalion » 04.06.2010 (Пт) 12:47

CallByName не подходит: Click - это событие, а не метод или свойство.

Нашел решение.Если кто-нибудь столкнется, вот подсказка:

Объявить переменную типа Object с WithEvents, например:
Private WithEvents Obj As Object, где Object соответствует названию контрола.
Ну и далее:
Private Sub Obj_Click()
В процедуре инициализации установить Obj на требуемый контрол.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как программно вызвать Click

Сообщение Хакер » 04.06.2010 (Пт) 19:03

CallByName не подходит: Click - это событие, а не метод или свойство.

Если ты нифига не понимаешь, мои ли это проблемы?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: как программно вызвать Click

Сообщение Денис » 05.06.2010 (Сб) 22:43

Dismalion писал(а):Нашел решение.Если кто-нибудь столкнется, вот подсказка:


1. Объявить объектную переменную с параметром WithEvents
2. Написать для нее все нужные события.
3. При инициализации формы создать контрол и присвоить его объявленной объектной переменной.

Это не ново, главное, примерно это же делает дизайнер, когда вы добавляете контролы на форму. В чем преимущество? Много контролов в рантайме хотите создать? Под каждую из них своя объектная переменная. Все на одну повесить? Среда не позволит.
А Вы вообще, знакомы с массивами контролов?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Dismalion
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 06.02.2006 (Пн) 13:57

Re: как программно вызвать Click

Сообщение Dismalion » 07.06.2010 (Пн) 0:44

Нужно мне это все для следующего: на форме есть несколько контролов (textbox, checkbox и т.п.), необходимо было сохранять их состояние и загружать при следующем открытии формы. Запись производилась в INI файлы. Так вот, при этом мне приходилось писать

Код: Выделить всё
WriteINI Элемент1, значение1
WriteINI Элемент2, значение2
....................
WriteINI ЭлементХ, значениеХ


Захотел я это упростить - перебор все элементов и запись всех состояний через For Each ct In Me.Controls.
Но возникла проблема - элементы типа checkbox были с событием click. Настройка "была галочка или нет" загружалась, а вот вызвать click таким образом уже не выходило. Вот и потребовалась такая экзотическая возможность с WithEvents для вызова click.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Majestic-12 [Bot], Yandex-бот и гости: 3

    TopList