我有两个DLL文件。我们称它们为:
以下两个步骤描述了我正在这两个DLL上使用的用例:
我想做的是从一个操作中运行两个DLL的功能-本质上执行第no步。在一个新的DLL文件中的一个函数调用中,第4至6个操作。
我的新DLL文件中的代码如下:
Dim acDocDwg01 As Document
Dim acDocDwg02 As Document
<CommandMethod("DOITALL", CommandFlags.Session)>
Public Sub AllInOneFunction()
Dim dosomething01 As New DoSomething01.clsMain
Dim dosomething02 As New DoSomething02.clsMain
Dim acDocMgr As DocumentCollection = Application.DocumentManager
If isBothDrawingsOpened() Then
' Activate Drawing01 document
acDocMgr.MdiActiveDocument = acDocDwg01
dosomething01.createStuff()
' Activate Drawing02 document
acDocMgr.MdiActiveDocument = acDocDwg02
dosomething02.createMoreStuff()
End If
End Sub
Private Function isBothDrawingsOpened() As Boolean
Dim flag As Boolean
'Collection of all opened documents
Dim acadDocs As DocumentCollection = Application.DocumentManager
Dim acDoc As Document
Dim acCurDb As Database
Dim d1, d2 As Boolean
For Each acDoc In acadDocs
acCurDb = acDoc.Database
If acCurDb.Filename = "Drawing01" > 0 Then
d1 = True
acDocDwg01 = acDoc
ElseIf acCurDb.Filename = "Drawing02" > 0 Then
d2 = True
acDocDwg02 = acDoc
End If
modLog.LogWrite(1, "Current Document: " & acDoc.Name)
Next acDoc
If (d1 And d2) = False Then
MessageBox.Show("Please open both Drawing01.dwg and Drawing02.dwg before executing this function.")
flag = False
Else
flag = True
End If
Return flag
End Function
问题是... ,因为我需要在两个文档(工程图)之间切换,所以我需要使用CommandFlags.Session
。但是步骤中的功能没有。 6,使用CommandFlags.UsePickSet
。我提供的代码只是通过DoSomething02.dll功能上的代码运行,而无需等待用户输入(单击)。
您可以通过使用VB.NET中的+运算符和| |来指定使用多个标志。 C#中的运算符。
<CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet + _
CommandFlags.NoBlockEditor)> _
Public Sub CheckForPickfirstSelection()
. . .
End Sub
我尝试这样做,但是没有用。行为是相同的。
更新: 我尝试逆转操作顺序:
If isBothDrawingsOpened() Then
' Activate Drawing02 document
acDocMgr.MdiActiveDocument = acDocDwg02
dosomething02.createMoreStuff()
' Activate Drawing01 document
acDocMgr.MdiActiveDocument = acDocDwg01
dosomething01.createStuff()
End If
它实际上是在等我单击图纸,然后继续。该问题可能与文档激活(切换)有关。实际上,我可以看到活动文档随着代码的运行而发生变化,但是切换之后,用户将无法再以交互方式中断(?)。也许我在激活或切换到文档方面缺少什么?
答案 0 :(得分:1)
不确定,但是在将acDocDwg01设置为current之后,也许可以将焦点放在图形上。 就像:Autodesk.AutoCAD.ApplicationServices.Application.MainWindow.Focus();