明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: xwjljh

[命令] 双击CAD对象,显示自定义对话框实现方法(VB.NET)

  [复制链接]
发表于 2009-5-30 16:05:00 | 显示全部楼层
本帖最后由 作者 于 2009-5-31 11:17:58 编辑

Com的版本,引用两个类型库
  1. using System;
  2. using System.Collections.Generic;
  3. using Autodesk.AutoCAD.Runtime;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.ApplicationServices;
  6. using Autodesk.AutoCAD.EditorInput;
  7. using Autodesk.AutoCAD.Interop;
  8. using Autodesk.AutoCAD.Interop.Common;
  9. [assembly: ExtensionApplication(typeof(CadTest.TlsApplication))]
  10. namespace CadTest
  11. {
  12.     class TlsApplication : IExtensionApplication
  13.     {
  14.         void IExtensionApplication.Initialize()
  15.         {
  16.             TTest.Start();
  17.         }
  18.         void IExtensionApplication.Terminate()
  19.         {
  20.         }
  21.     }
  22.     class TTest
  23.     {
  24.         static bool m_DbClick = false;
  25.         static Dictionary<IntPtr, AcadDocument> m_AcadDocs = new Dictionary<IntPtr, AcadDocument>();
  26.         public static void Start()
  27.         {
  28.             foreach (Document doc in Application.DocumentManager)
  29.             {
  30.                 AcadDocument acaddoc = (AcadDocument)doc.AcadDocument;
  31.                 m_AcadDocs.Add(doc.Window.Handle, acaddoc);
  32.                 acaddoc.BeginDoubleClick += new _DAcadDocumentEvents_BeginDoubleClickEventHandler(beginDoubleClick);
  33.             }
  34.             Application.DocumentManager.DocumentLockModeChanged += new DocumentLockModeChangedEventHandler(vetoCommand);
  35.             Application.DocumentManager.DocumentCreated += new DocumentCollectionEventHandler(documentCreated);
  36.         }
  37.         static void documentCreated(object sender, DocumentCollectionEventArgs e)
  38.         {
  39.             Document doc = e.Document;
  40.             AcadDocument acaddoc = (AcadDocument)doc.AcadDocument;
  41.             m_AcadDocs.Add(doc.Window.Handle, acaddoc);
  42.             acaddoc.BeginDoubleClick += new _DAcadDocumentEvents_BeginDoubleClickEventHandler(beginDoubleClick);
  43.         }
  44.         static void beginDoubleClick(object PickPoint)
  45.         {
  46.             IntPtr ip = Application.DocumentManager.MdiActiveDocument.Window.Handle;
  47.             if (m_AcadDocs.ContainsKey(ip))
  48.             {
  49.                 AcadDocument doc = m_AcadDocs[ip];
  50.                 AcadSelectionSet ss = doc.PickfirstSelectionSet;
  51.                 if (ss.Count == 1)
  52.                 {
  53.                     AcadLine line = ss.Item(0) as AcadLine;
  54.                     if (line != null)
  55.                     {
  56.                         object xt;
  57.                         object xd;
  58.                         line.GetXData("MyApp", out xt, out xd);
  59.                         object[] datas = (object[])xd;
  60.                         Application.ShowAlertDialog("数目共" + datas[2].ToString());
  61.                         m_DbClick = true;
  62.                         return;
  63.                     }
  64.                 }
  65.             }
  66.             m_DbClick = false;
  67.         }
  68.         static void vetoCommand(object sender, DocumentLockModeChangedEventArgs e)
  69.         {
  70.             if (m_DbClick)
  71.             {
  72.                 switch (e.GlobalCommandName.ToLower())
  73.                 {
  74.                     case "properties":
  75.                         m_DbClick = false;
  76.                         e.Veto();
  77.                         break;
  78.                 }
  79.             }
  80.         }
  81.     }
  82. }
 楼主| 发表于 2009-5-30 21:46:00 | 显示全部楼层

您好,Com的版本的VB.net代码怎么实现呀?谢谢了

发表于 2009-5-30 22:03:00 | 显示全部楼层

VB.Net好久没用了,快忘光了:)

把步骤说下吧

TTest.Start方法中

重载Application.DocumentManager.DocumentCreated事件,

在新建文档时把当前文档的Com实例加入集合里

然后重载新建文档的BeginDoubleClick事件

明天有时间慢慢改改看

发表于 2009-5-31 11:12:00 | 显示全部楼层
  1. Imports System
  2. Imports System.Collections.Generic
  3. Imports Autodesk.AutoCAD.Runtime
  4. Imports Autodesk.AutoCAD.DatabaseServices
  5. Imports Autodesk.AutoCAD.ApplicationServices
  6. Imports Autodesk.AutoCAD.EditorInput
  7. Imports Autodesk.AutoCAD.Interop
  8. Imports Autodesk.AutoCAD.Interop.Common
  9. Namespace TlsTest
  10.     Public Class TApplication
  11.         Implements IExtensionApplication
  12.         Public Sub Initialize() Implements Autodesk.AutoCAD.Runtime.IExtensionApplication.Initialize
  13.             TTest.Start()
  14.         End Sub
  15.         Public Sub Terminate() Implements Autodesk.AutoCAD.Runtime.IExtensionApplication.Terminate
  16.         End Sub
  17.     End Class
  18.     Public Class TTest
  19.         Private Shared m_Veto As Boolean
  20.         Private Shared m_AcadDocs As Dictionary(Of IntPtr, AcadDocument) = New Dictionary(Of IntPtr, AcadDocument)
  21.         Public Shared Sub Start()
  22.             AddHandler Application.DocumentManager.DocumentLockModeChanged, AddressOf vetoCommand
  23.             AddHandler Application.DocumentManager.DocumentCreated, AddressOf documentCreated
  24.             For Each doc As Document In Application.DocumentManager
  25.                 Dim acaddoc As AcadDocument = doc.AcadDocument
  26.                 m_AcadDocs.Add(doc.Window.Handle, acaddoc)
  27.                 AddHandler acaddoc.BeginDoubleClick, AddressOf beginDoubleClick
  28.             Next
  29.         End Sub
  30.         Shared Sub vetoCommand(ByVal sender As Object, ByVal e As DocumentLockModeChangedEventArgs)
  31.             If m_Veto Then
  32.                 Select Case e.GlobalCommandName.ToLower()
  33.                     Case "properties"
  34.                         m_Veto = False
  35.                         e.Veto()
  36.                 End Select
  37.             End If
  38.         End Sub
  39.         Shared Sub documentCreated(ByVal sender As Object, ByVal e As DocumentCollectionEventArgs)
  40.             Dim doc As AcadDocument = e.Document.AcadDocument
  41.             m_AcadDocs.Add(e.Document.Window.Handle, doc)
  42.             AddHandler doc.BeginDoubleClick, AddressOf beginDoubleClick
  43.         End Sub
  44.         Shared Sub beginDoubleClick(ByVal PickPoint As Object)
  45.             Dim ip As IntPtr = Application.DocumentManager.MdiActiveDocument.Window.Handle
  46.             If m_AcadDocs.ContainsKey(ip) Then
  47.                 Dim doc As AcadDocument = m_AcadDocs(ip)
  48.                 Dim ss As AcadSelectionSet = doc.PickfirstSelectionSet
  49.                 If ss.Count = 1 Then
  50.                     Dim line As AcadLine = ss.Item(0)
  51.                     If Not (line Is Nothing) Then
  52.                         Dim xt = Nothing, xd = Nothing
  53.                         line.GetXData("MyApp", xt, xd)
  54.                         Application.ShowAlertDialog("数目共" + xd(2).ToString())
  55.                         m_Veto = True
  56.                         Return
  57.                     End If
  58.                 End If
  59.             End If
  60.             m_Veto = False
  61.         End Sub
  62.     End Class
  63. End Namespace

 楼主| 发表于 2009-5-31 23:42:00 | 显示全部楼层

谢谢了

还是遇到问题,我再好好研究研究

谢谢您的帮助了

发表于 2009-11-3 21:36:00 | 显示全部楼层

我在VS2005、CAD2006中测试的效果仍然无法屏蔽属性窗体,应该不是版本的问题吧?

发表于 2009-11-3 21:38:00 | 显示全部楼层
lzh741206发表于2009-5-30 16:05:00Com的版本,引用两个类型库using System;using System.Collections.Generic;using Autodesk.AutoCAD.Runtime;using Autodesk.AutoCAD.DatabaseServices;using Autodesk.AutoCAD.ApplicationSer

     在VS2005和CAD2006中测试的效果还是会显示属性窗体?e.Veto()是什么意思?好像没起到什么作用?
发表于 2009-11-3 21:55:00 | 显示全部楼层

原则上2006可以使用NetApi,但最好是不要,Bug很多的

发表于 2009-11-3 23:00:00 | 显示全部楼层

那在CAD2006中怎么实现实体的双击事件呢?查了很长时间,一直没有解决,有说用反应器的,反应器不是和事件差不多嘛?还有说CUI的,不知道CUI如何实现,忘狐哥和其他大侠们帮帮忙!!!

发表于 2009-11-4 17:52:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 04:24 , Processed in 0.161102 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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