powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не срабатывает свое событие
7 сообщений из 7, страница 1 из 1
Не срабатывает свое событие
    #38388731
DexterI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите плиз...
Решил накалякать небольшое подспорье при работе с проектами в MS Project 2007...
Кейс такой:
При изменении значение одного поля в задаче необходимо сменить аналогичные поля и для нескольких других задач.

Пытаюсь реализовать с через перехват событий:
1. Код для объекта ThisProject:
Код: vbnet
1.
2.
3.
Private Sub Project_Open(ByVal pj As Project)
  EnableEvents
End Sub



2. Создал Модуль ChangeCode:
Код: vbnet
1.
2.
3.
4.
5.
6.
Option Explicit

Public Chng As New clsChange
Sub EnableEvents()
   Set Chng.ProjApp = MSProject.Application
End Sub



3. Создал класс модули clsChange и clsEvents:
clsChange
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Option Explicit
Public Event AfterChangeTask(TskID As String, _
                       ByRef blnCancel As Boolean)
Public WithEvents ProjApp As MSProject.Application


Private Sub ProjApp_ProjectBeforeTaskChange(ByVal tsk As Task, ByVal Field As PjField, ByVal NewVal As Variant, Cancel As Boolean)
   If NewVal = "Значение1" Then
      If MsgBox("Are you sure you want to Change Task" & _
         vbCrLf & vbCrLf & tsk.Name, vbYesNo) _
            = vbNo Then
        Cancel = True 'Cancel the Task Delete
      Else
            tsk.PercentComplete = 100
            RaiseEvent AfterChangeTask(tsk.ID, False)
        ' End If
      End If
   End If
End Sub



clsEvents
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Option Explicit
Public WithEvents EventApp As clsChange

Private Sub Class_Initialize()
Set EventApp = New clsChange
End Sub

Private Sub EventApp_AfterChangeTask(TskID As String, blnCancel As Boolean)
MsgBox ("Ок!!")
End Sub



В итоге событие ProjApp_ProjectBeforeTaskChange срабатывает нормально, а вот событие AfterChangeTask не срабатывает.:(

Подскажите чего не так делаю, плиз.. Программированием уже давно никаким не занимался.. так что сильно не наезжайте если уж совсем глупость написана :)
...
Рейтинг: 0 / 0
Не срабатывает свое событие
    #38388740
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В коде отсутствует создание экземпляра clsEvents, потому и не срабатывает - нечему срабатывать.
...
Рейтинг: 0 / 0
Не срабатывает свое событие
    #38388752
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, есть еще нюанс.
При инициализации clsEvents создается ДРУГОЙ экземпляр класса clsChange, не тот, который генерит событие AfterChangeTask, так что событие вы все равно не получите.
...
Рейтинг: 0 / 0
Не срабатывает свое событие
    #38388780
DexterI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProКстати, есть еще нюанс.
При инициализации clsEvents создается ДРУГОЙ экземпляр класса clsChange, не тот, который генерит событие AfterChangeTask, так что событие вы все равно не получите.
Можете подсказать рабочий вариант в данной случае?
...
Рейтинг: 0 / 0
Не срабатывает свое событие
    #38388810
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там много лишнего сейчас наворочено, но я предполагаю, что вы выкладываете упрощенный вариант, а на самом деле все эти навороты вам нужны, поэтому сложно предложить, как поступить, не зная всего объема задачи, ну например можно так:

1. Код для объекта ThisProject:
Код: vbnet
1.
2.
3.
Private Sub Project_Open(ByVal pj As Project)
  EnableEvents
End Sub



2. Создал Модуль ChangeCode:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Option Explicit

Public Chng As clsChange
Public Ev As clsEvents

Sub EnableEvents()
   Set Chng = New clsChange
   Set Ev = New clsEvents
End Sub



3. Создал класс модули clsChange и clsEvents:
clsChange
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Option Explicit

Public Event AfterChangeTask(TskID As String, _
                       ByRef blnCancel As Boolean)
Public WithEvents ProjApp As MSProject.Application

Private Sub Class_Initialize()
   Set ProjApp = Application
End Sub

Private Sub ProjApp_ProjectBeforeTaskChange(ByVal tsk As Task, ByVal Field As PjField, ByVal NewVal As Variant, Cancel As Boolean)
   If NewVal = "Значение1" Then
      If MsgBox("Are you sure you want to Change Task" & _
         vbCrLf & vbCrLf & tsk.Name, vbYesNo) _
            = vbNo Then
        Cancel = True 'Cancel the Task Delete
      Else
            tsk.PercentComplete = 100
            RaiseEvent AfterChangeTask(tsk.ID, False)
        ' End If
      End If
   End If
End Sub



clsEvents
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Option Explicit
Public WithEvents EventApp As clsChange

Private Sub Class_Initialize()
  Set EventApp = Chng
End Sub

Private Sub EventApp_AfterChangeTask(TskID As String, blnCancel As Boolean)
MsgBox ("Ок!!")
End Sub
...
Рейтинг: 0 / 0
Не срабатывает свое событие
    #38392698
DexterI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТам много лишнего сейчас наворочено, но я предполагаю, что вы выкладываете упрощенный вариант, а на самом деле все эти навороты вам нужны, поэтому сложно предложить, как поступить, не зная всего объема задачи, ну например можно так:


Благодарю, такой вариант подойдет.
Если несложно, то может еще поможете? :)
При дальнейшем развитии своей поделки столкнулся с тем, что нужно как-то перехватывать событие по drag'n'drop: при перетаскивании задачи у нее меняется index, соответственно мне нужно отлавливать этот момент и апдейтить поля в других задачах, в которых содержится этот индекс (аналогично работе поля "Предшественники")... соответственно документация гласит, что при изменении значения поля в результате drag'n'drop стандартное событие BeforeTaskChange не поднимается... отсюда вопрос как отловить смену значения поля task.index?
...
Рейтинг: 0 / 0
Не срабатывает свое событие
    #38392718
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, не помогу, никогда не программировал в Project
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не срабатывает свое событие
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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