У меня есть проект, который содержит несколько форм, в которых есть элемент управления 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, включая имена страниц, они просто отображают ее по-разному. Поэтому я хотел бы иметь возможность перемещаться между ними без необходимости перезагружать все. Может быть, активное окно связано с проблемой, мне придется провести больше исследований.