全面分析VB.NET MOVE命令

开发 后端
这里介绍要等待VB.NET MOVE命令的执行结束(使用CommandEnded事件),这时就可以安全地修改对象了。当然,任何对块索引的修改将会触发ObjectOpenedForModify事件。

本章的目的是解释AutoCAD事件怎样才能被用于控制AutoCAD图形中的行为。我们不想让用户能改变EMPLOYEE块索引的位置,而对于其它的非EMPLOYEE块索引的位置则没有这个限制。我们将混合使用数据库与文档事件来做到这一点。

#t#首先,我们想要监视将要被执行的AutoCAD命令(使用CommandWillStart事件)。特别地,我们要监视VB.NET MOVE命令。另外,当一个对象要被修改时,我们应该被通知(使用ObjectOpenedForModify事件),这样我们可以确定它是否为一个EMPLOYEE块索引。如果这时就修改对象可能是无效的,因为我们的修改可能会再次触发事件,从而引起不稳定的行为。所以,我们要等待VB.NET MOVE命令的执行结束(使用CommandEnded事件),这时就可以安全地修改对象了。当然,任何对块索引的修改将会触发ObjectOpenedForModify事件。我们还需要设置一些全局变量来表明一个VB.NET MOVE命令在运行和被修改的对象是一个EMPLOYEE块索引。

注意:因为本章需要比较多的代码来获得想要的结果,所以我们不会解释任何与事件处理无关的代码,而只是将它们粘贴到事件处理函数中。这里的重点是成功创建和注册事件处理函数。

创建新工程

我们以第六章的工程开始。请新加入一个类AsdkClass2。我们还要加入四个全局变量。前两个是Boolean型的:一个用来表示我们监视的命令是否是活动的,另外一个用来表示ObjectOpenedForModify事件处理函数是否该被忽略。

  1. '全局变量  
  2. Dim bEditCommand As Boolean  
  3. Dim bDoRepositioning As Boolean 

接下来,我们要声明一个全局变量来表示一个ObjectIdCollection,它用来存储我们所选择的要修改的对象的ObjectID。

  1. Dim changedObjects As New ObjectIdCollection() 

最后,我们要声明一个全局变量来表示一个Point3dCollection,它用来包含我们所选对象的位置(三维点)。

  1. Dim employeePositions As New Point3dCollection() 

创建第一个文档事件处理函数(回调函数)

现在我们要创建一个事件处理函数。当AutoCAD命令开始执行的时候它会通知我们。我们要检查GlobalCommandName的值是否为MOVE。

  1. If e.GlobalCommandName = "MOVE" Then  
  2. 'Set the global variables  
  3. 'Delete all stored information  
  4. End If 

如果VB.NET MOVE命令开始执行的话,我们要相应地设置Boolean变量bEditCommand的值,这样我们可以知道我们所监视的命令是活动的。同样地,我们应该把另外一个Boolean变量bDoRepositioning设置为false来忽略ObjectOpenedForModify事件处理函数。两个变量设置好以后,在命令活动期间,我们必须要获得所选块索引的信息。

我们还应该把两个集合对象的内容清空。我们只关心当前选择的对象。

责任编辑:佚名 来源: IT168
相关推荐

2009-10-28 10:04:53

VB.NET XmlW

2009-11-02 15:57:36

VB.NET WEB

2009-10-14 15:20:21

VB.NET窗体指针

2009-10-29 15:16:02

VB.NET文件传送

2009-10-15 10:57:16

VB.NET Text

2009-10-27 09:45:03

VB.NET数组

2009-10-16 13:04:57

VB.NET字符串数组

2009-10-28 17:44:31

VB.NET语言

2009-11-02 14:48:45

VB.NET HOOK

2009-11-10 16:46:52

VB.NET指针应用

2009-10-15 11:42:05

VB.Net赋值语句

2009-10-21 09:10:52

VB.NET压缩

2009-11-02 17:12:01

VB和VB.NET

2009-10-20 17:38:20

VB.NET exce

2009-10-29 11:26:28

VB.NET调用Web

2009-11-10 16:20:25

VB.NET全局热键

2009-10-15 17:50:48

VB.NET调用API

2010-01-12 17:54:42

VB.NET Dlli

2009-10-28 14:34:44

VB.NET Tree

2009-10-09 17:40:38

VB.Net问题集
点赞
收藏

51CTO技术栈公众号