powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перехват событий
8 сообщений из 8, страница 1 из 1
Перехват событий
    #35244046
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На форме лежат куча объектов и видимый только один.
Как можно перехватить Click и Unload сказать один раз
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Command1_Click()
    Unload Me
End Sub

Private Sub Label1_Click()
    Unload Me
End Sub

Private Sub Text1_Click()
    Unload Me
End Sub
...
Рейтинг: 0 / 0
Перехват событий
    #35244660
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dim WithEvents s As CommandButton

Private Sub Form_Activate()
    ev 'Не работает в Form_Load
End Sub

Private Sub s_Click()
    Unload Me
End Sub

Private Sub ev()
    Command2.Visible = True
    Dim oj As Control
    For Each oj In Me.Controls
        Debug.Print oj.Name, oj.Visible
        If oj.Visible = True Then Set s = oj
    Next
End Sub

Но как объявить UserControl

Код: plaintext
1.
Dim WithEvents myControl As UserControl
Set myControl = Me.mySmall ' Ошибка- не совпадение типов
...
Рейтинг: 0 / 0
Перехват событий
    #35244767
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub Form_Load
  Me.Keypreview = true
End Sub

sub Form_Click
  unload me
end sub
...
Рейтинг: 0 / 0
Перехват событий
    #35244772
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поторопился написать - не сработает мой пример.
А что конкретно надо?
Что бы клик по любому текстбоксу сразу форму закрывал?
...
Рейтинг: 0 / 0
Перехват событий
    #35244885
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на форме 12 UserControl ов будет больше, видимость которых определяется от выбора пользователя, и у каждого контрола одинаковые Event (LoadForm-устанавливает размеры формы, MoveForm-перемещает форму, Click-открывает копию этой формы с другим UserControl ну и тд) вот и получается на форме 900 строк кода, вместо 10.
Решение нашел...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim WithEvents myControl As VBControlExtender

Private Sub myControl_ObjectEvent(Info As EventInfo)
    Select Case Info.name
        Case "Minimized": MsgBox "Minimized"
        Case "LoadForm": MsgBox "LoadForm"
        Case "Closed": Unload Me
        Case "MoveForm": MsgBox "MoveForm"
        Case ...
    End Select
    Debug.Print Info.name
End Sub
...
Рейтинг: 0 / 0
Перехват событий
    #35245419
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Второй день с этим мучаюсь подскажите как мне убедить myControl что он равен myListFile до 2ого события

Код: plaintext
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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
'Модуль загружает форму
Function LoadForm(ByVal tCaption As String, Optional formName As myFormName =  0 , Optional mKey As String, Optional mTop As Long =  500 , Optional mLeft As Long =  400 )
    For Each oForm In Forms
        If oForm.Caption = tCaption Then
            Call myWindowSetFocus(tCaption)
            Exit Function
        End If
    Next
   
    Set oForm = New frmBook
    Select Case formName
        Case - 2 : frmList.Show: Call SaveText("Открытие: " & frmSelect.Caption,  1 )
        Case - 1 : frmSelect.Show: Call SaveText("Открытие: Интернет",  1 )
        Case  0 
            With oForm
                .Caption = mKey
                .Tag = formName
                .Top = mTop
                .Left = mLeft
                .myListFile.Visible = True
                .myListFile.Rec = mKey
            End With
        Case ........
    End Select
    Call myWindowLoad(tCaption,  1 )
    Call SaveText("Открытие: " & tCaption,  1 )
End Function

'Событие UserControl
Private Sub UserControl_Show()
    RaiseEvent LoadForm(UserControl.ScaleWidth, UserControl.ScaleHeight)
End Sub

Dim WithEvents myControl As VBControlExtender
Private Sub mEvent()
    Dim obj As Control
    For Each obj In Me.Controls
        If obj.Visible = True Then
            Set myControl = obj
        End If
    Next
End Sub

'1 Событие формы
Private Sub Form_Load()
    Call mEvent 
    Debug.Print "Form_Load" ', myControl.name
End Sub
'myControl=Nothing (myControl=myListFile если есть стоп точка на Form_Load)
'2 Событие контрола
Private Sub myListFile_LoadForm(ByVal mWidth As Long, ByVal mHaignt As Long)
    ....
End Sub
'myControl =myListFile

'3 Событие формы
Private Sub Form_Activate()

End Sub

'Только после этого начинает работать
Private Sub myControl_ObjectEvent(Info As EventInfo)
    Select Case Info.name
        Case "Minimized": MsgBox "Minimized"
        Case "LoadForm": MsgBox "LoadForm"
            Me.Width = Info.EventParameters("mWidth").Value
            Me.Height = Info.EventParameters("mHaignt").Value
        Case "Closed": Unload Me
        Case "Click": Call LoadForm(Info.EventParameters("mKey").Value, myListFile.mType, Str(Info.EventParameters("mKey")))
        Case "MoveForm": Call meMove
    End Select
End Sub
...
Рейтинг: 0 / 0
Перехват событий
    #35245568
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: mr Vap
> Второй день с этим мучаюсь подскажите как мне убедить myControl что
> он равен myListFile до 2ого события

Ничего не понял :( ну ладно :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub mEvent()
    Dim obj As Control
    For Each obj In Me.Controls
        If obj.Visible = True And obj Is "Тип myListFile" Then
            Set myControl = obj
        End If
    Next
End Sub
И собственно вопрос возник, по коду, если у тебя Visible = True установленно
более чем для одного контрола, то myControl будет ПООЧЕРЕДНО указывать на
КАЖДЫЙ из "видимых" контролов и по итогу останется указывающим на КАКОЙ-ТО
из "видимых" контролов формы или если "видимых" контролов нет, то будет
"висеть" в воздухе

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перехват событий
    #35245677
mr Vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимый только один объект(myListFile как пример)
Проблема в последовательности событий

в Form_Load объявляется myControl=obj (1 видимый из 12), но присваевается почемуто только после Form_Activate или когда на Form_Load стоит прерывание, а мне надо myControl=obj до события контрола myListFile_LoadForm.
При Set myControl = me.myListFile тоже все работает нормально.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перехват событий
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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