引出
CATIA二次开发VBA入门(5)——catia文档操作vb.net程序案例,打开catia文件,进行视图操作,退出程序
catia文档操作案例
1.初始化窗体,始终置顶
' --------------------------------------------------------------
' 窗口属性设定API声明
' --------------------------------------------------------------
Private Declare Function SetWindowPos Lib "user32" (
ByVal hwnd As Long,
ByVal hWndInsertAfter As Long,
ByVal x As Long, ByVal y As Long,
ByVal cx As Long, ByVal cy As Long,
ByVal wFlags As Long) As Long
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
' ***********************************************************************
' 目的: 设置窗口使其始终在其它窗口上面
'
' 输入: iHwnd: 要设置的窗口句柄
' bOnTop: 设置或取消窗口的置顶属性
' 可选,默认为真
' ***********************************************************************
Sub MakeMeOnTop(iHwnd As Long, Optional bOnTop As Boolean = True)
If bOnTop Then
SetWindowPos(iHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE)
Else
SetWindowPos(iHwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE)
End If
End Sub
始终置顶方式2
2.打开文件
在较旧版本的Visual Basic中,如VB6及其之前的版本,CommonDialog
控件用于提供一个通用的对话框界面,可以用于打开文件、保存文件、选择颜色或打印文档等功能。用户可以通过在工具箱中添加 CommonDialog
控件到窗体上,然后在代码中设置其属性和调用其方法来使用这些标准对话框。
以下是使用 CommonDialog
控件的一个简单例子:
vb
' 设置对话框的操作为打开文件
CommonDialog1.Action = vbCommonDialogOpenFile
' 显示打开文件对话框
CommonDialog1.ShowOpen
' 使用用户选择的文件名
If CommonDialog1.FileName <> "" Then
MsgBox "您选择的文件是:" & CommonDialog1.FileName
End If
然而,在.NET环境中(比如VB.NET),CommonDialog
控件已经被不同的专用对话框控件所替代,例如:
OpenFileDialog
- 打开文件对话框SaveFileDialog
- 保存文件对话框ColorDialog
- 颜色选择对话框FontDialog
- 字体选择对话框PrintDialog
- 打印对话框
在VB.NET中使用这些对话框通常更简单、更直接,不需要设置 Action
属性,只需要创建对话框的实例,设置所需的属性,并调用 ShowDialog
方法即可。例如,使用 OpenFileDialog
的代码如下:
' 创建打开文件对话框的实例
Dim openFileDialog As New OpenFileDialog()
' 配置对话框的属性
openFileDialog.Title = "选择文件"
openFileDialog.Filter = "所有文件 (*.*)|*.*"
' 显示对话框并检查对话框结果
If openFileDialog.ShowDialog() = DialogResult.OK Then
' 获取用户选择的文件名
MessageBox.Show("您选择的文件是:" & openFileDialog.FileName)
End If
使用这种方式,你可以为你的VB.NET应用程序提供一个现代化和一致的对话框体验。
3.视图切换
4.退出
在Visual Basic 6.0及其之前的版本中,Unload Me
是一条常用的语句,用于从内存中卸载当前窗体。然而,在Visual Basic .NET(VB.NET)中,这个语句不再适用,因为VB.NET采用了不同的窗体管理和内存管理机制。
在VB.NET中,要关闭当前窗体,你应该使用 Me.Close()
方法。这个方法会关闭窗体并释放其占用的资源。例如:
' 关闭当前窗体
Me.Close()
Me.Close()
方法会触发窗体的 FormClosed
和 FormClosing
事件,你可以在这些事件中执行任何必要的清理工作。
如果你想要从内存中完全移除窗体,以便它不再可用,并且可以被垃圾回收器回收,你可以在窗体的 FormClosed
事件中设置窗体变量为 Nothing
:
Private Sub YourForm_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
' 设置窗体变量为 Nothing,以便它可以被垃圾回收
YourForm = Nothing
End Sub
请注意,在VB.NET中,窗体通常是按需加载的,这意味着只有当窗体被显示时,它才会被加载到内存中。当窗体被关闭时,它通常会被卸载,除非有其他代码或事件保持对它的引用。因此,在大多数情况下,你不需要手动卸载窗体,Me.Close()
就足够了。
5.完整代码
model
Imports MECMOD
Imports PARTITF
Imports HybridShapeTypeLib
Module Module1
Public CATIA As INFITF.Application
Public oPartDoc As PartDocument
Public oPart As Part
Public oBodies As Bodies
Public oBody As Body
Public oHBodies As HybridBodies
Public oHBody As HybridBody
Public oSF As ShapeFactory
Public oHSF As HybridShapeFactory
' ***********************************************************************
' 目的: 初始化CATIA产品文档,并初始化必要的基本变量
'
' 输入: bNewProduct: 初始化时是否新建产品文件
' 可选,默认新建文件
' strProduct: 初始化时是否打开已经存在的产品文件
' 可选,默认新建文件
' ***********************************************************************
Sub InitCATIAPart(Optional ByVal bNewPart As Boolean = True,
Optional ByVal strPart As String = "")
On Error Resume Next '有错误的话会忽略,继续执行下一句
' 如果打开catia,就获取当前的这个
CATIA = GetObject(, "CATIA.Application")
If Err.Number <> 0 Then
' 如果没有打开catia,则打开新的catia
CATIA = CreateObject("CATIA.Application")
CATIA.Visible = True
End If
If bNewPart Then
oPartDoc = CATIA.Documents.Add("Part")
Else
If strPart = "" Then
oPartDoc = CATIA.ActiveDocument
If oPartDoc Is Nothing Then
Err.Clear()
oPartDoc = CATIA.Documents.Add("Part")
End If
Else
If Dir(strPart) <> "" Then
oPartDoc = CATIA.Documents.Open(strPart)
Else
MsgBox("指定的文件不存在!")
End
End If
End If
End If
On Error GoTo 0
oPartDoc = CATIA.ActiveDocument
oPart = oPartDoc.Part
oBodies = oPart.Bodies
oBody = oBodies.Item(1)
oHBodies = oPart.HybridBodies
oHBody = oHBodies.Add()
oSF = oPart.ShapeFactory
oHSF = oPart.HybridShapeFactory
End Sub
' ------------------------