Элемент управления Visio сбрасывает старые данные, когда вызывается show () - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть проект, который содержит несколько форм, в которых есть элемент управления Microsoft Visio ActiveX. По какой-то причине они продолжают мешать друг другу. Вот отрывок из моего кода, упрощенно:

private void OpenRDM()
{
   if (RDMform == null)
   {
      // Constructor opens a new form, and populates a Visio control on it
      RDMform = new RDM.MainForm(); 
   }
   RDMform.Show();
}

private void OpenPSM()
{
   if (PSMform == null)
   {
      // Constructor opens a new form, and populates a Visio control on it
      PSMform = new PSM.MainForm();
   }
   PSMform.Show();  // Problem occurs here, PSM Visio control gains contents of RDM's Visio Control
}

public void main()
{
   OpenRDM();
   RDMform.Hide();
   OpenPSM();
   PSMForm.Hide();
}

Я могу вызвать одну из этих функций, и она отлично работает, но если я скрываю форму, а затем вызываю другую, ее элемент управления Visio загружается с содержимым первой формы, а не с правильным новым материалом. Я проследил его, и второй элемент управления Visio заполняется очень хорошо, пока не будет вызван второй метод Show (), и тогда он загадочным образом возвращается к содержимому первого элемента управления Visio.

Я не могу понять, что здесь происходит. Кажется, Visio считает, что это один и тот же элемент управления.

Редактировать * В ответ на комментарий о настройке свойства .src. Источник - чудовище, поэтому я не могу публиковать все, что он делает. Но вот эти строки. в RDM:

If visioControl.Src <> TemplateFullName Then
   visioControl.Src = TemplateFullName
Else
   visioControl.Src = ""
   visioControl.Src = TemplateFullName
End If

в PSM:

drawingControl.Src = string.Empty;
drawingControl.Src = vstFilepath;
InitializeFlowDiagram(dbFilepath); // updates shapes from database values

Оба модуля фактически используют одну и ту же диаграмму visio, включая имена страниц, они просто отображают ее по-разному. Поэтому я хотел бы иметь возможность перемещаться между ними без необходимости перезагружать все. Может быть, активное окно связано с проблемой, мне придется провести больше исследований.

...