Tumanov писал(а):
Ну да, QUEUEMARKEREVENT тоже нормально работает.
Естественно, это более чистое решение.
В VB6 это выглядит вот так
Код:
Dim WithEvents vApp As Visio.Application
Private Sub Form_Load()
DrawingControl1.Src = "G:\!w\Ýêñï\Visio\DrawContrPopUp_AddAdvise_Marker\d1.vsd"
Set vApp = DrawingControl1.Document.Application
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set vApp = Nothing
End Sub
Private Sub vApp_MarkerEvent(ByVal app As Visio.IVApplication, ByVal SequenceNum As Long, ByVal ContextString As String)
MsgBox "DoubleClick from Sheet." & ContextString
End Sub
Нужные шейпы заряжаются функцией QUEUEMARKEREVENT и в качестве параметра передают, например, свой ID.
Благодарю, сделал под шарп. Напишу детально, может кому пригодится.
0. В вижуо в нужном шейпе в шейпшите в разделе событий на даблкли написать QUEUEMARKEREVENT(аргумент). В качестве аргумента я передаю Prop.name (кастомный) и Prop.id (кастомный) и разделитель между ними "|". В шарп вернется СТРОКА, которую нужно будет распарсить (ну или нет...). Этот шейп закинуть в стенсилсы, привязанные к проекту ссылкой на файл
1. В проект добавить ссылки на вижуо
2. Добавить ссылку на контрол AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl
3. Создать объект (можно без него) AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl drawing_area_on_form. Мне удобно работать с явным выделением листочка для рисования ))
4. Вытащить контрол на форму
5. Повесить на событие загрузки формы подписку на событие даблклика
Код:
drawing_area_on_form.Document.Application.MarkerEvent+=new Microsoft.Office.Interop.Visio.EApplication_MarkerEventEventHandler(Processing_double_click_on_shape);
6. Метод обработчик (вообще создается автоматически, но можно и руками)
Код:
private void Processing_double_click_on_shape(Microsoft.Office.Interop.Visio.Application app, int SequenceNum, string ContextString)
{
if(ContextString!=null)
{
MessageBox.Show(ContextString);
}
}
7. ContextString - это СТРОКА, отправленная из вижуо.