2012-03-24 29 views
0

我试图将点击事件添加到Visio文件内的形状..我有功能来拾取点击事件,但我无法弄清楚如何将窗口控件分配给绘图窗口文件。Visio自动化/分配窗口到绘图

我尝试..

System.Diagnostics.Process.Start("visio.exe", "test.vdx") 
    sourceWindow = New Microsoft.Office.Interop.Visio.Window 
    sourceWindow.Src = "Path" 

我不断收到错误,请注意如果需要更多的细节IL及时为他们提供,请注意路径是一样的test.vdx?

这是代码,采取窗口对象..

Public Class HandleMouseEvents 

    Private Const shapesFoundPrompt As String = _ 
     "Shapes at the click location:" 
    Private Const noShapesFoundPrompt As String = _ 
     "No shapes at the click location." 

    Private clickedWindow As Microsoft.Office.Interop.Visio.Window 

    '// <summary>This constructor initiates handling of the MouseUp event 
    '// by storing a reference to the window and assigning the event 
    '// handling procedure this class defines as a delegate 
    '// to the window's MouseUp event.</summary> 
    <CLSCompliant(False)> _ 
    Public Sub New(ByVal subjectWindow As _ 
     Microsoft.Office.Interop.Visio.Window) 

     Try 

      '// Add the MouseUp handler to the window. When the event is 
      '// raised mouseUp_EventHandler will be called. 
      clickedWindow = subjectWindow 
      AddHandler clickedWindow.MouseUp, _ 
       AddressOf mouseUp_EventHandler 

     Catch errorThrown As System.Runtime.InteropServices.COMException 
      Debug.WriteLine(errorThrown.Message) 
     End Try 

我试图让窗口传递到上面的代码和一个表单

上创建一个按钮单击事件中的VDX文件

回答

0

VBA

您必须到Visio应用程序的引用。为了做到这一点,必须要么得到一个已经打开的Visio实例或创建一个新

Dim visio as Object, doc as Object 

On Error Resume Next 

' Try to get existing Visio instance 
Set visio = GetObject(, "Visio.Application") 
If visio Is Nothing Then ' Visio is not open 
    ' Open Visio 
    Set visio = CreateObject("Visio.Application") 
    If visio Is Nothing Then 
     MsgBox "Cannot open Visio!" 
     Exit Sub 
    End If 
End If 

Set doc = visio.Documents.Open("C:\MyVisioDocsPath\test.vdx") 
visio.Visible = True 

请注意,我用后期绑定在这里,这意味着我没有引用设置到Visio。优点是您的代码可以与任何版本的Visio一起使用;但是,您不会享受Visio对象的智能感知。

您还可以设置对Visio的引用,然后使用具体类型,例如Visio.ApplicationVisio.Document,这会为Visio对象提供智能感知。


UPDATE:VB.NET

在您的项目设置为Microsoft.Office.Interop.Visio参考,并导入这样

Imports Visio = Microsoft.Office.Interop.Visio 

命名空间现在,你可以简单地打开这样的文档

Dim visio As New Visio.Application 
Dim doc As Visio.Document 

doc = visio.Documents.Open("C:\MyVisioDocsPath\test.vdx") 
AddHandler visio.ActiveWindow.MouseUp, AddressOf Window_MouseUp 

处理程序厕所KS这样

Private Sub Window_MouseUp(ByVal Button As Integer, ByVal KeyButtonState As Integer, _ 
       ByVal x As Double, ByVal y As Double, ByRef CancelDefault As Boolean) 
    Console.WriteLine("x = {0}, y = {1}", x, y) 
End Sub 

,也可以定义一个成员变量(在类或模块,而不是本地的方法)这样

Dim WithEvents window As Visio.Window 

然后就可以简单地从下拉选择window可变代码编辑器左上角的下拉列表以及右上角下拉列表中的事件自动生成处理程序(并且可以使用AddHandler删除该行)。打开该文件后,你会活动窗口分配给这样

window = visio.ActiveWindow 
+0

编辑上面的代码中的变量,可能已经在这里有点混乱,也是“设置”关键字有,在vb.net中使用? – aspiringCoder 2012-03-24 19:07:26

+0

对不起,我最近回答了一个VBA问题,并混淆了这两个问题。我添加了一个VB.NET示例。 – 2012-03-24 19:34:31

+0

啊好吧我看到了,如果将绘图分配给窗口,那么我可以说test = handlemouseevent(doc)将文档传递给它? – aspiringCoder 2012-03-24 19:43:04