Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 29 мар 2024, 03:07

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Почему перестаёт работать Drop?
СообщениеДобавлено: 24 мар 2021, 23:42 
Не в сети
Новичок

Зарегистрирован: 24 мар 2021, 21:04
Сообщений: 25
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Код:
        private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            Shapes shapes = Globals.ThisAddIn.Application.ActivePage.Shapes;
            findUserShape(shapes);
        }

        void findUserShape(Shapes shapes)
        {
            foreach(Shape shape in shapes)
            {
                if (shape.Text == "User Shape")
                {
                    Shape new_shape = Globals.ThisAddIn.Application.ActivePage.Drop(shape, 0, 0);
                    new_shape.Text = "New shape";
                    return;
                }
                if (shape.Shapes != null && shape.Shapes.Count > 0)
                    findUserShape(shape.Shapes);
            }
        }
Давайте разместим на странице шейп с текстом "User Shape"
И будем нажимать кнопку. Всё будет прекрасно, будут дропаться новые шейпы.

Но теперь давайте сгруппируем User shape, или разгруппируем.
И у нас появится ошибка:

System.Runtime.InteropServices.COMException: "
Операция завершилась успешно, но объект не был возвращен."

Метод дроп сломался. Что с ним произошло?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 24 мар 2021, 23:59 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Dubsage писал(а):
Но теперь давайте сгруппируем User shape, или разгруппируем.
И у нас появится ошибка:
1. в какой строке произошла ошибка ?
2. группировка/разгруппировка выполнялась во время простоя цикла или цикл запускался снова

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 25 мар 2021, 00:05 
Не в сети
Новичок

Зарегистрирован: 24 мар 2021, 21:04
Сообщений: 25
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
Dubsage писал(а):
Но теперь давайте сгруппируем User shape, или разгруппируем.
И у нас появится ошибка:
1. в какой строке произошла ошибка ?
2. группировка/разгруппировка выполнялась во время простоя цикла или цикл запускался снова


1. В методе Drop.
2. Тест запускался два раза. Между тестами произвели изменения.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 25 мар 2021, 00:13 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Dubsage писал(а):
Тест запускался
тест это энное количество итераций или полный цикл перебора всех шейпов ?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 25 мар 2021, 01:40 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 963
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100614

Добавить очки репутацииУменьшить очки репутации
Похоже Visio что-то не чистит у себя.
Крест животворящий вполне работает:
Код:
        private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            GC.Collect();                       // о тот, кто темнее сумерек, о тот, кто багрянее текущей крови,
            GC.WaitForPendingFinalizers();      // во имя тебя, погребённого в глубинах времён, во славу твою,
            GC.Collect();                       // я присягаю тьме! Пусть те безумцы, что противостоят нам,
            GC.WaitForPendingFinalizers();      // будут уничтожены нашей с тобой единой силой!

            Shapes shapes = Globals.ThisAddIn.Application.ActivePage.Shapes;
            findUserShape(shapes);
        }

        void findUserShape(Shapes shapes)
        {
            foreach(Shape shape in shapes)
            {
                if (shape.Text == "User Shape")
                {
                    Shape new_shape = Globals.ThisAddIn.Application.ActivePage.Drop(shape, 0, 0);
                    new_shape.Text = "New shape";
                    return;
                }
                if (shape.Shapes != null && shape.Shapes.Count > 0)
                    findUserShape(shape.Shapes);
            }
        }

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 25 мар 2021, 08:12 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
А я как раз хотел посоветовать DoEvents();
Хз правда, работает ли это из надстройки...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 25 мар 2021, 08:52 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
nbelyh писал(а):
GC.Collect();                       // о тот, кто темнее сумерек, о тот, кто багрянее текущей крови,
GC.WaitForPendingFinalizers();      // во имя тебя, погребённого в глубинах времён, во славу твою,
GC.Collect();                       // я присягаю тьме! Пусть те безумцы, что противостоят нам,
GC.WaitForPendingFinalizers();

:D
А зачем два раза?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 25 мар 2021, 09:21 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
9rey писал(а):
А зачем два раза?
дежавю?
Tumanov в сообщении #12159 писал(а):
Не знаю.
nbelyh посоветовал вот здесь
http://visguy.com/vgforum/index.php?topic=8314.0


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 25 мар 2021, 11:51 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 963
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100614

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
А зачем два раза?

Драгу-слейв потому что (самое сильное заклинание черной магии), чтобы наверняка всех убить (из обоих поколений GC)
К тому же, чтобы полный текст вошел. Вроде неплохо получилось надо взять на вооружение :mrgreen:

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


Последний раз редактировалось nbelyh 25 мар 2021, 14:09, всего редактировалось 2 раз(а).

Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 25 мар 2021, 13:54 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 963
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100614

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
А я как раз хотел посоветовать DoEvents();
Хз правда, работает ли это из надстройки...

Не, DoEvents этот баг не берет, я попробовал, это слишком слабая магия. Да, из надстройки это делается так:
Код:
System.Windows.Forms.Application.DoEvents();

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 25 мар 2021, 17:58 
Не в сети
Новичок

Зарегистрирован: 24 мар 2021, 21:04
Сообщений: 25
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Вау!
Код:
GC.Collect();                       // о тот, кто темнее сумерек, о тот, кто багрянее текущей крови,
GC.WaitForPendingFinalizers();      // во имя тебя, погребённого в глубинах времён, во славу твою,
GC.Collect();                       // я присягаю тьме! Пусть те безумцы, что противостоят нам,
GC.WaitForPendingFinalizers();      // будут уничтожены нашей с тобой единой силой!
Вот это я на форум мощных колдунов попал! Это работает. Спасибищи. Теперь можно использовать метод Drop =) С такой то магией )))


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 25 мар 2021, 22:05 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
nbelyh писал(а):
Драгу-слейв потому что

Не, я до сюда С# не дочитал...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Почему перестаёт работать Drop?
СообщениеДобавлено: 26 мар 2021, 13:30 
Не в сети
Новичок

Зарегистрирован: 24 мар 2021, 21:04
Сообщений: 25
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Я может очевидные вещи напишу. Но вдруг кому-то будет полезным. Как только вы решите использовать сборщик мусора. Вам придётся всё время держать в голове: "А не останутся ли у меня тут ссылки на фигуры." Теперь нужно строго следить, за тем чтобы все ссылки были уничтожены, ровно до использования сборщика мусора. (На создовал вчера объектов и мучался, почему всё опять сломалось)
Код:
GC.Collect();                       // о тот, кто темнее сумерек, о тот, кто багрянее текущей крови,
GC.WaitForPendingFinalizers();      // во имя тебя, погребённого в глубинах времён, во славу твою,
GC.Collect();                       // я присягаю тьме! Пусть те безумцы, что противостоят нам,
GC.WaitForPendingFinalizers();      // будут уничтожены нашей с тобой единой силой!
И да! Действительно, порой нужно вызывать два раза =( Магия VSTO.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB