明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2503|回复: 6

各位大侠,有关VB.net编写lsp对话框函数问题!

[复制链接]
发表于 2012-5-22 12:28:27 | 显示全部楼层 |阅读模式
我想写一个lsp可以用来调用对话框的vb.net  dll,加载后就会有这个函数来调用,选中的的文件名写入CAD系统变量(没办法呀,自定义lsp函数的参数搞不明白)代码如下:
  1. Imports Autodesk.AutoCAD.DatabaseServices
  2. Imports Autodesk.AutoCAD.Windows '.OpenFileDialog
  3. Imports Autodesk.AutoCAD.ApplicationServices
  4. Imports Autodesk.AutoCAD.Runtime

  5. Public Class CADnet
  6.     <LispFunction("LispDialog")> _
  7.     Public Sub LispDialog(ByVal rbArgs As ResultBuffer)
  8.         'Dim Myvar As String = Application.GetSystemVariable("USERS1")
  9.         Try
  10.             Dim Myfile As String = ""
  11.             If rbArgs = Nothing Then
  12.                 Dim sFilter As String = "*"
  13.                 Dim MLsDlog As New OpenFileDialog("打开----江河梦小组", "", sFilter, "", OpenFileDialog.OpenFileDialogFlags.AllowMultiple)
  14.                 Dim Fname As String = ""
  15.                 MLsDlog.ShowDialog()
  16.                 For Each Fname In MLsDlog.GetFilenames()
  17.                     Myfile = Myfile & Fname & ","
  18.                 Next
  19.         Application.SetSystemVariable("USERS1", Myfile)
  20.         MLsDlog = Nothing
  21.         End If
  22.         Catch e As Exception
  23.         End Try
  24.     End Sub
  25. End Class
加载dll后确实有了这个函数,选中文件文件名就会存入系统变量。但是问题来了,如果点击取消按钮,CAD会马上出现致命错误,请各大侠给指点指点!
发表于 2012-5-22 13:46:04 | 显示全部楼层
if MLsDlog.ShowDialog()<>DialogResult.OK Then Return
 楼主| 发表于 2012-5-22 18:17:31 | 显示全部楼层
楼上正解,多谢大侠指点。
  1. Imports Autodesk.AutoCAD.DatabaseServices
  2. Imports Autodesk.AutoCAD.Windows '.OpenFileDialog
  3. Imports Autodesk.AutoCAD.ApplicationServices
  4. Imports Autodesk.AutoCAD.Runtime
  5. Imports Autodesk.AutoCAD.LayerManager.LayerFilter
  6. 'E:\我的磁盘\源代码\VB.net\vb.net程序\lsp函数对话框(lispdialog)\lsp函数对话框(lispdialog)\bin\Debug\lsp函数对话框(lispdialog).dll
  7. Public Class CADnet
  8.     <LispFunction("LispDialog")> _
  9.     Public Sub LispDialog(ByVal rbArgs As ResultBuffer)
  10.         'Dim Myvar As String = Application.GetSystemVariable("USERS1")
  11.         Try
  12.             Dim Myfile As String = ""
  13.             If rbArgs = Nothing Then
  14.                 Dim sFilter As String = "*"
  15.                 Dim MLsDlog As New OpenFileDialog("打开----江河梦小组", "", sFilter, "", OpenFileDialog.OpenFileDialogFlags.AllowMultiple)
  16.                 Dim Fname As String = ""
  17.                 MLsDlog.ShowDialog()
  18.                 If MLsDlog.ShowDialog() <> DialogResult.OK Then
  19.                     Exit Sub
  20.                 Else
  21.                     For Each Fname In MLsDlog.GetFilenames()
  22.                         Myfile = Myfile & Fname & ","
  23.                     Next
  24.                     Application.SetSystemVariable("USERS1", Myfile)
  25.                     MLsDlog = Nothing
  26.                 End If
  27.             End If
  28.         Catch e As Exception
  29.         End Try
  30.     End Sub
  31. End Class
但是为何点击取消后,这个对话框会再弹出来一次,再点击才会消失,请再指点一下!谢谢
发表于 2012-5-22 19:31:59 | 显示全部楼层
删掉一个MLsDlog.ShowDialog()
 楼主| 发表于 2012-5-23 12:19:37 | 显示全部楼层
额,是呀。竟然忽略了这个,谢谢各位指点。
发表于 2012-6-24 09:49:19 | 显示全部楼层
本帖最后由 雪山飞狐_lzh 于 2012-6-24 09:51 编辑

选中的的文件名写入CAD系统变量。。。
LispFunction可以有返回值的,看这里6楼代码
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=79849&extra=page%3D1%26filter%3Dtypeid%26typeid%3D36&page=1
 楼主| 发表于 2012-11-8 17:45:42 | 显示全部楼层
雪山飞狐_lzh 发表于 2012-6-24 09:49
选中的的文件名写入CAD系统变量。。。
LispFunction可以有返回值的,看这里6楼代码
http://bbs.mjtd.com/ ...

受教了,多谢狐哥指点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 16:41 , Processed in 0.153275 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表