События как? примеры на C#

Автор KrissKross, 11.11.16, 22:11:10

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

KrissKross

Добрый день!

Не могу разобраться с событиями

1. Возможно ли подписка на событие из стороннего приложения - *.exe
2. Есть ли у кого простой пример на С# -
3. Пытаюсь разобраться с примерами из SDK - Step12 и EventsAuto
3.1. Есть базовый класс BaseEvent, в котором 2-е основных функции:
                Advise()   - Подписаться на получение событий
                Unadvise() - Отписаться от получения событий
3.2. Далее наследуем от BaseEvent к примеру события уровня приложения
ApplicationEvent : BaseEvent, Kompas6API5.ksKompasObjectNotify
public ApplicationEvent(object obj): base(obj, typeof(ksKompasObjectNotify).GUID, null) {} // Конструктор

3.3. Далее создаю экземпляр события
            ApplicationEvent aplEvent = new ApplicationEvent(kompas); // Обработчик событий приложения КОМПАС
            aplEvent.Advise();
            Console.ReadLine();
            BaseEvent.TerminateEvents(typeof(ApplicationEvent), null);


и ничего


KrissKross

Sabahs
Благодарю за видео

В принципе, приведенный в самом начале, код - работает
надо было только внимательно передавать параметры
ApplicationEvent aplEvent = new ApplicationEvent(kompas);
где  kompas - Kompas6API5.KompasObject

KrissKross

И тогда доп вопрос
на какое событие подписываться
при потери ссылок на входящие файлы при открытии сборки

При беглом тестировании
BeginReguestFiles - не работает

Всё оно работает, данное окно контролируется свойством IApplication.HideMessage.

KrissKross

Уважаемый Sabahs

а можно чуточку по-подробней

Правильно понимаю, логику работы:
Выставляем HideMessage.ksHideMessageNo или ksHideMessageYes ?- чтобы не смущать пользователя сообщением
Далее из справки BeginRequestFiles
ЦитироватьВ данных событиях в отличие от других событий начала какого либо действия требуется обработка трех состояний:

– отказ пользователя или обработка события выполнена полностью на стороне библиоте­ки - событие возвращает FALSE;

– событие возвращает TRUE и имя файла для продолжения выполнения команды - про­цесс продолжается без запуска диалога выбора файла или файлов;

– событие возвращает TRUE, но имя файла не возвращается - запускается стандартный диалог выбора файла из системы КОМПАС.

Набросок кода:
        static int IDRequestFiles = 1; // Счетчик состояний
        List<string> Files; // Список файлов для замены
        public bool BeginReguestFiles(int type, ref object files)
        {
            switch (IDRequestFiles)
            {
                //– отказ пользователя
                //или обработка события выполнена полностью на стороне библиоте­ки -
                //- событие возвращает FALSE;
                case 1:
                    IDRequestFiles++;
                    return false;

                    //событие возвращает TRUE и
                    //имя файла для продолжения выполнения команды -
                    //-про­цесс продолжается без запуска диалога выбора файла или файлов;
                case 2:
                    IDRequestFiles = 1;  // Возвращаем счетчик в исходное состояние
                    files = Files; // Список файлов для замены
                    return true;
                default:
                    break;
            }
            return true;
        }



Всё от целей, данное событие срабатывает до вывода диалога выбора файла, в обработчике Вы можете сами открыть нужный без участия пользователя, можете блокировать вывод данного диалога или выводить диалог.
PS. Отладчик и смотрите логику работы в разных вариантах, видео примерно об этом.

KrissKross

В том то и дело
до BeginRequestFiles() - не доходит сообщение

смотрел тему
http://forum.ascon.ru/index.php/topic,28529.msg220181.html#msg220181

Идет исправление в коде
function ApplicationEvent.IsNotifyProcess(notifyType:SYSINT):WordBool;
begin
  Result:=(notifyType>=koCreateDocument)and(notifyType<=koBeginChoiceMaterial);
end;


но в C# - нет функции IsNotifyProcess

а цели:
при появлении сообщении - которое пользователь конечно не видит
произвести замену файлов - програмно

IsNotifyProcess - это фильтр.
Со свойством IApplication.HideMessage надо осторожно работать, т.к. оно меняет поведение Компас-3D, его всегда нужно возвращать в исходное состояние и до BeginRequestFiles дело может не дойти.