2012-03-24 28 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