Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не срабатывает свое событие / 7 сообщений из 7, страница 1 из 1
06.09.2013, 10:04
    #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
06.09.2013, 10:14
    #38388740
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает свое событие
В коде отсутствует создание экземпляра clsEvents, потому и не срабатывает - нечему срабатывать.
...
Рейтинг: 0 / 0
06.09.2013, 10:23
    #38388752
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает свое событие
Кстати, есть еще нюанс.
При инициализации clsEvents создается ДРУГОЙ экземпляр класса clsChange, не тот, который генерит событие AfterChangeTask, так что событие вы все равно не получите.
...
Рейтинг: 0 / 0
06.09.2013, 10:44
    #38388780
DexterI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает свое событие
Shocker.ProКстати, есть еще нюанс.
При инициализации clsEvents создается ДРУГОЙ экземпляр класса clsChange, не тот, который генерит событие AfterChangeTask, так что событие вы все равно не получите.
Можете подсказать рабочий вариант в данной случае?
...
Рейтинг: 0 / 0
06.09.2013, 10:59
    #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
10.09.2013, 17:49
    #38392698
DexterI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не срабатывает свое событие
Shocker.ProТам много лишнего сейчас наворочено, но я предполагаю, что вы выкладываете упрощенный вариант, а на самом деле все эти навороты вам нужны, поэтому сложно предложить, как поступить, не зная всего объема задачи, ну например можно так:


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


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