0 / 0 / 0
Регистрация: 21.10.2008
Сообщений: 62
1

Динамические контролы и обработка события Click

25.01.2009, 11:51. Показов 8670. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Еще раз. Excel 2000. Я подгружаю динамически в форму календарь.
Visual Basic
1
2
3
4
5
6
Private Cld As Control
 
Private Sub UserForm_Initialize()
Set Cld = Controls.Add('MSCAL.Calendar.7')
...
end sub
Как в этом случае мне отработать событие Click ?
Если календарь статический то все просто - процедура Private Sub Cld_Click().
Если я неправильно подгружаю динамически календарь, то очень хотелось бы пример - как надо это делать правильно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2009, 11:51
Ответы с готовыми решениями:

Обработка события Click, вставка html после генерации и обработка этого кода
Подскажите пожалуйста как заставить работать эту часть кода 18 строка ...

Обработка события Click в Datagridview
Не хотел открывать тему, хотел разобраться сам. Но полного ответа нигде по форуму не нашел, только...

Обработка события Click в TextBox
Здравствуйте . Возник вопрос по событию Click. Есть матрица 3 на 3 : int mas =new int; ...

Обработка события Click и похожие вещи
Здоров всем, Двойной щелчок по компоненту кнопки на форме автоматически вставляет в код: ...

5
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 397
25.01.2009, 13:59 2
Для того, чтобы назначить свою процедуру на события какого-то класса (календарь), необходимо раннее связывание - (в Refernces должна быть ссылка на этот класс)
Нет, конечно можно попытаться и без этого, через ....., но зачем городить кучу кода с API функциями.

В UserForm секции (General) объявляете (при разработке следует установить ссылку на календарь в References )
Visual Basic
1
Private WithEvents cl As MSACAL.Calendar
Затем пишете нужный код
Visual Basic
1
2
3
4
5
6
Private Sub cl_Click()
    MsgBox '!!!'
End Sub
Private Sub UserForm_Initialize()
    Set cl = Me.Controls.Add('MSCAL.Calendar.7')
End Sub
теперь можно убрать в References ссылку на календарь

На событии открытия книги вешаем процедуру добавления ссылки и открытия формы
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Workbook_Open()
    On Error Resume Next
    Application.ActiveWorkbook.VBProject.References.AddFromFile 'mscal.ocx'
    Call FS
End Sub
Private Sub FS()
    On Error GoTo 999
    UserForm1.Show
999:
    Err.Clear
End Sub
Сохраняем, запускаем
0
0 / 0 / 0
Регистрация: 21.10.2008
Сообщений: 62
25.01.2009, 15:07  [ТС] 3
Все сделал, как Вы говорили :
Visual Basic
1
2
3
4
5
6
Private WithEvents Cld As MSACAL.Calendar
 
Private Sub UserForm_Initialize()
 
Set Cld = Me.Controls.Add('MSCAL.Calendar.7')
...
В Reference галочка стоит.
При выполнении Add - ошибка - Type mismatch
0
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 397
25.01.2009, 16:00 4
Ну значит у меня Office кривой, код скопирован из рабочего примера.
0
0 / 0 / 0
Регистрация: 21.10.2008
Сообщений: 62
25.01.2009, 16:21  [ТС] 5
Может это у меня Office кривой или может быть еще чего-то надо сделать ?
0
1 / 1 / 1
Регистрация: 29.12.2008
Сообщений: 108
27.01.2009, 00:21 6
Специально для 'Джема'. Извини, что долго руки не доходили, ведь обещал уже давно. Вроде без проблем работает. Для примера-создай новый UserForm с именем UserForm6
Помести туда:
Visual Basic
1
2
3
4
5
6
7
Dim Mycmd As Control
Dim CommandButton1 As New Class1
 
Private Sub UserForm_Initialize()
Set Mycmd = Controls.Add('MSCAL.Calendar.7')
Set CommandButton1.CommandButton1 = UserForm6.Controls(1)
End Sub
Теперь создай класс с именем Class1. Копируй туда:
Visual Basic
1
2
3
4
5
Public WithEvents CommandButton1 As Calendar
 
Private Sub CommandButton1_Click()
MsgBox 'OK'
End Sub
Примерно работает так. Если хочешь к динамически добавляемому Controls прицепить класс (например, к реальному CommandButton, который ни черта не работает при таком действии), то объяви в классе вместо Public WithEvents CommandButton1 As Calendar - Public WithEvents CommandButton1 As MSForms.CommandButton, ну и в форме вместо Calendar вставь -
Set Mycmd = Controls.Add('Forms.CommandButton.1', 'CommandButton1')
Если прошло, - напиши.

Сергей

Совсем забыл, вставь в форму заранее Frame

Сергей

P.S. Во всем этом динамическом добавлении есть временной глюк. Можешь сделать то же и без Frame, тогда так (класс не меняешь):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim Mycmd As Control
Dim Mycmd1 As Control
Dim CommandButton1 As New Class3
 
Private Sub UserForm_Activate()
Application.Wait (Now + TimeValue('0:00:01'))
Set CommandButton1.CommandButton1 = UserForm6.ActiveControl
End Sub
 
Private Sub UserForm_Initialize()
Set Mycmd = Controls.Add('MSCAL.Calendar.7')
End Sub
Сергей

One more P.S.: Полистай события в классе. Там будут все события для календаря

Сергей
0
27.01.2009, 00:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2009, 00:21
Помогаю со студенческими работами здесь

Обработка события Click кнопки создаваемой в коде
в коде создаем панельку , обычно чтоб перейти в настройки кнопки по нажатию нужно кликнуть 2 раза ,...

Обработка события 'click', при постоянном нажатии на ссылку
<div class="dataTables_paginate paging_simple_numbers" id="DataTables_Table_0_paginate" ...

Обработка события UserControl.Click когда он закрыт Label
Здравствуйте, помогите решить дилемму. 1 - создал UserControl размером (26X26) - это игровая фишка...

Динамические контролы
В ActiveX DLL кладу Юзер контрол, в него набиваю: Sub foo() MsgBox 'Yoy!' End Sub В...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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