Ваш браузер устарел, не поддерживает современные веб-стандарты и представляет угрозу Вашей безопасности. Для комфортной работы с порталом, пожалуйста, установите современыый браузер.
Портал технической поддержки

Как программно закрыть одну карточку из другой карточки DV 5.1

Комментарии

Комментариев: 7

  • Тоже интересует этот вопрос.

    0
    Действия с комментариями Постоянная ссылка
  • Напрямую никак, для этого нужен доступ к CardFrame карточки, которую требуется закрыть (для вызова CardFrame.Close()).

    Можно попробовать всякие альтернативные методы, н-р, создать таймер в оригинальной карточке и проверять в нем, н-р, изменение в каком-либо поле + отсутствие блокировки открытой карточки, и уже по наступлению таких событий пытаться выполнить тот же CardFrame.Close()

    0
    Действия с комментариями Постоянная ссылка
  • А если вот такая карточка задания, в которой открывается по-умолчанию вложенный документ (см. файл Карточка.jpg)? При нажатии на кнопку Завершить этап я завершаю задание и при этом хочу закрыть карточку задания, но соответственно так как событие нажатия кнопки выполняется в карточке документа, на карточку задания я напрямую не могу повлиять, можно ли как-то закрыть такое задание?




    Карточка.jpg
    0
    Действия с комментариями Постоянная ссылка
  • Опять же, напрямую никак.

    Можно попробовать получить родительское окно верхнего уровня через цикл вроде такого:
    Control control = CardControl.Parent;
    while (control != null)
    {
     if (control.Name == "CardFrameForm")
     {
     }
     control = control.Parent;
    }

    и попробовать закрыть указанную форму.

    0
    Действия с комментариями Постоянная ссылка
  • Да ладно, прям-таки нельзя? очень даже можно! У класса DocsVision.Platform.WinForms. CardControl есть статический метод GetActiveCards,  который вернет массив активных в настоящий момент карточек. После получения можно выбрать из массива нужную карточку (зная идентификатор родительской карточки), привести полученную ссылку к типу BaseCardControl и спокойно даиршьь карточку при возникновении необходимого события.

     

     

     

     

    0
    Действия с комментариями Постоянная ссылка
  • *закрыть

    0
    Действия с комментариями Постоянная ссылка
  • Однако, да, забыл об этом методе, спасибо, что напомнили!

    Можно даже не приводить к BaseCardControl, а просто найти требуемую карточку через CardData.Id и закрыть через CardFrame.

    В качестве примера код, который выведет Id и заголовок окна первой открытой карточки:
    var cardControls = DocsVision.Platform.WinForms.CardControl.GetActiveCards();
    if (cardControls.Any())
     MessageBox.Show(string.Format("Карточка: {0}, заголовок окна: {1}", cardControls[0].CardData.Id, cardControls[0].CardFrame.Caption));

     

    Единственное, что надо учесть - данный метод актуален только для карточек, которые унаследованы от CardControl, т.к. данная коллекция - это внутренний static объект в классе CardControl.

    0
    Действия с комментариями Постоянная ссылка

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