Помогите, люди добрые!
Сделал макрос для поиска в содержимом строчных текстов. Много с ними работаю, давно хотел такую функцию. И вроде работает более-менее. Но есть вопрос. Опишу более подробно.
Файл из прилагаемого архива, называется "Поиск текста.grb", кладу в папку \Program\Macros. MacroLibrary.dll - в \Program.
---------- Случай №1 ----------
1.1. Запускаю T-Flex (сборка 10.0.57.0). Открытых документов нет, девственно чистое окно КАДа. Открываю окно "Макросы", запускаю TestDllMacro из узла "Поиск текста". Собственно, это ссылка внутрь DLL-ки. Макрос проверяет TFlex.Application.ActiveDocument == null и ругается. Всё хорошо. Затем открываю любой .grb документ, запускаю макрос снова. Загружается форма (метод Show(), немодально), выполняю поиск с разными результатами. Всё работает.
1.2. Макрос запущен, форма висит - закрываю документ, в котором искал. Теперь внимание - форма вместе с документом НЕ закрывается, остаётся. Клацаю "Найти всё" - ругается, doc == null, всё правильно. Так открываю, закрываю 5-6 документов (форма "живёт", никуда не исчезает), в них ищу - всё работает на ура.
---------- Случай №2 ----------
2.1. Запускаю T-Flex (сборка 10.0.57.0). Открытых документов нет, девственно чистое окно КАДа. Внимание: загружаю любой .grb документ (т.е. в этом случае - до того, как 1й раз запустить макрос). Запускаю макрос вызовом TestDllMacro из узла "Поиск текста". Форма загружается. Выполняю поиск в открытом документе, всё кул. Теперь моя беда: в этом варианте №2, который я сейчас описываю, при закрытии документа запущенная форма "насильственно" закрывается вместе с ним. Причём я проверял - управление в этом случае в обработчик события mainForm.FormClosing() не попадает!
После такого издевательства над формой 2й запуск макроса загружает форму в нерабочем состоянии - текст-боксы в нокауте, работает только кнопка "Выход". Помогает только полный перезапуск T-Flex.
Ну и теперь собственно вопрос:
Как заставить форму вести себя ВСЕГДА как в вышеописанном случае №1, т.е. нормально работать "при любой погоде".
Ну и может кто-нибудь подскажет, в чём же причина разного поведения формы?
P.S.Цепляю в пост архив .rar, там исходники проекта в Visual C# 2008 и .grb-шка с вызовом DLL-ки. В проекте есть скомпиленная в Debug-версии DLL-ка MacroLibrary.dll.
Сделал макрос для поиска в содержимом строчных текстов. Много с ними работаю, давно хотел такую функцию. И вроде работает более-менее. Но есть вопрос. Опишу более подробно.
Файл из прилагаемого архива, называется "Поиск текста.grb", кладу в папку \Program\Macros. MacroLibrary.dll - в \Program.
---------- Случай №1 ----------
1.1. Запускаю T-Flex (сборка 10.0.57.0). Открытых документов нет, девственно чистое окно КАДа. Открываю окно "Макросы", запускаю TestDllMacro из узла "Поиск текста". Собственно, это ссылка внутрь DLL-ки. Макрос проверяет TFlex.Application.ActiveDocument == null и ругается. Всё хорошо. Затем открываю любой .grb документ, запускаю макрос снова. Загружается форма (метод Show(), немодально), выполняю поиск с разными результатами. Всё работает.
1.2. Макрос запущен, форма висит - закрываю документ, в котором искал. Теперь внимание - форма вместе с документом НЕ закрывается, остаётся. Клацаю "Найти всё" - ругается, doc == null, всё правильно. Так открываю, закрываю 5-6 документов (форма "живёт", никуда не исчезает), в них ищу - всё работает на ура.
---------- Случай №2 ----------
2.1. Запускаю T-Flex (сборка 10.0.57.0). Открытых документов нет, девственно чистое окно КАДа. Внимание: загружаю любой .grb документ (т.е. в этом случае - до того, как 1й раз запустить макрос). Запускаю макрос вызовом TestDllMacro из узла "Поиск текста". Форма загружается. Выполняю поиск в открытом документе, всё кул. Теперь моя беда: в этом варианте №2, который я сейчас описываю, при закрытии документа запущенная форма "насильственно" закрывается вместе с ним. Причём я проверял - управление в этом случае в обработчик события mainForm.FormClosing() не попадает!
После такого издевательства над формой 2й запуск макроса загружает форму в нерабочем состоянии - текст-боксы в нокауте, работает только кнопка "Выход". Помогает только полный перезапуск T-Flex.
Ну и теперь собственно вопрос:
Как заставить форму вести себя ВСЕГДА как в вышеописанном случае №1, т.е. нормально работать "при любой погоде".
Ну и может кто-нибудь подскажет, в чём же причина разного поведения формы?
P.S.Цепляю в пост архив .rar, там исходники проекта в Visual C# 2008 и .grb-шка с вызовом DLL-ки. В проекте есть скомпиленная в Debug-версии DLL-ка MacroLibrary.dll.