Public Overrides Sub OnDrop(ByVal e As System.Windows.Forms.DragEventArgs)
End Sub
在这个函数中,我们最后会调用AsdkClass1的成员CreateDivision() 和CreateEmployee,传入ModelessForm类中的编辑框的值。要实现这个功能,我们需要一个方法来连接ModelessForm实例。最佳的方法是通过DragEventArgs。但首先我们要把鼠标事件连接到MyDropTarget类。
10) 加入下面的代码到鼠标左键(MouseButtons.Left)处理函数中:
Application.DoDragDrop(Me,
Me, System.Windows.Forms.DragDropEffects.All, New MyDropTarget())
注意我们传入’me’两次。第一次是用于Control参数,第二次是用于传入用户自定义数据。因为我们传入的是ModelessForm 类的实例,所以我们可以在放下的时候使用它来获取编辑框的值。
11) 回到OnDrop处理函数,让我们使用参数来调用创建雇员的函数。首先,添加职位提示的代码。在AsdkClass1.Create()中已经有相关的代码了,位于‘Get Employees
Coordinates…’.注释下面。添加此代码来提示输入职位。
12) 接下来,获取传入到DragEventArgs 参数的ModelessForm对象:
Dim ctrl As ModelessForm = e.Data.GetData(GetType(ModelessForm))
请注意一下怎样通过GetType关键字把参数强制转化为ModelessForm的实例。
13) 使用上面的实例来调用AsdkClass1成员:
AsdkClass1.CreateDivision(ctrl.tb_Division.Text,
AsdkClass1.sDivisionManager)
AsdkClass1.CreateEmployee(ctrl.tb_Name.Text, ctrl.tb_Division.Text,
ctrl.tb_Salary.Text, prPosRes.Value())
注意:AsdkClass1的方法要不通过AsdkClass1的实例来调用,那么方法必须被声明为’ Shared’。因为public static 方法只能调用其它的Shared方法,你需要修改几个AsdkClass1类中的方法为’ Shared’。请你进行相关的修改(应该至少有4项要修改)。
14) 最后,因为我们处理的事件位于AutoCAD命令之外,我们必须再次在会修改数据库的代码处锁住文档。请加入锁住文档的代码,加入的方法与前面的上下文菜单是一样的。
编译、装载并运行组件,使用PALETTE命令。你应该可以使用拖放操作来创建一个雇员了。
第三部分 从有模式窗体中选择实体
本章的以下部分将演示获取一个用户在屏幕上选择的雇员实例的详细信息,并把信息显示在一个有模式窗体的编辑框中。这部分的重点是创建一个有模式窗体,并在执行选择操作而窗体要失去焦点时隐藏它。为了获取雇员的详细信息,我们将使用第4章结束时给出的ListEmployee帮助函数。
首先,我们需要创建一个窗体类。这个类是一个真实的窗体而不是我们在ModelessForm中创建的用户控件。
15) 在工程中创建一个Windows窗体类。调用‘ModalForm’类。在窗体中加入以下所示的三个编辑框控件和标签控件以及两个按钮。
使用属性窗口来设置三个编辑框的属性。设置如下:
<首先是最上面的编辑框>
(Name) = tb_Name
Text = <空白>
<第二个编辑框>
(Name) = tb_Division
Text = <空白>
<第三个编辑框>
(Name) = tb_Salary
Text = <空白>
<上部的按钮>
(Name) = SelectEmployeeButton
Text
= Select Employee
<下部的按钮>
(Name) = Close
Text
= Close
接下来创建按钮的事件处理函数。‘Close’按钮可以只简单地调用:
Me.Close()
要显示对话框,让我们在类中创建一个把窗体实例化为有模式对话框的命令函数。下面的实现的代码:
<CommandMethod("MODALFORM")>
_
Public
Sub ShowModalForm()
Dim modalForm As ModalForm = New ModalForm()
Application.ShowModalDialog(modalForm)
End
Sub
编译、装载并在AutoCAD中运行MODALFORM命令来看看对话框是否可以工作。试试在对话框的右下角调整对话框的大小,然后关闭它。注意,重新使用MODALFORM命令时,对话框会出现在你上次离开的地方!这是ShowModalDialog方法的一个特征。大小和位置值被AutoCAD保存了。
‘Select Employee’按钮首先将执行一个简单的实体选择。这我们可以通过使用Editor.GetEntity()方法来实现,选择单一的实体比使用选择集来得方便的多。下面是怎样使用这个方法的代码:
Dim prEnt As PromptEntityOptions = New PromptEntityOptions("Select
an Employee")
Dim prEntRes As PromptEntityResult = ed.GetEntity(prEnt)
16) 把上面的代码加入到SelectEmployeeButton_Click处理函数中,还要加入必需的数据库、命令行、事务处理设置变量和一个try catch块。不要忘了在finally块中销毁它们。
使用PromptStatus.OK来测试GetEntity的返回值,如果返回不等于,就调用this.Show并退出处理函数。
一旦我们获得的返回值是OK,那么我们就可以使用PromptEntityResult.ObjectId()方法来获取所选实体的object Id。这个id可以和一个固定的字符串数组被传入到AsdkClass1.ListEmployee函数中来获取雇员的详细信息。可以通过以下的代码说明:
Dim saEmployeeList(-1) As String
''''This is right...it is redimed in the ListEmployee function.
AsdkClass1 上一页 [1] [2] [3] [4] 下一页 [C语言系列]NET 中C#的switch语句的语法 [系统软件]托拽Explore中的文件到VB.net的窗口 [系统软件]Boost库在XP+Visual C++.net中的安装 [常用软件]新配色面板:Paint.Net3.0RC1官方下载 [常用软件]用内建的“Net Meeting”聊天 [VB.NET程序]Henry的VB.NET之旅(三)—共享成员 [VB.NET程序]Henry的VB.NET之旅(二)—构造与析构 [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体 [VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET) [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
|