当前位置: 北大青鸟学士后主页 > 在线教程 > .net > -> 文章内容

.net中在无模式窗体中加入拖放支持

发布: 2011-02-18 15:20 | 来源: 未知 | 编辑:北大青鸟学士后 | 查看: 次 |

  在这部分,我们将加入允许我们使用面板窗体中编辑框的值来创建一个雇员。当用户从面板中拖动到AutoCAD中,将会提示输入职位,一个新的雇员实体将使用这些值来进行创建。

  1) 为了支持拖放,我们首先需要一个对象来进行拖动。在编辑框的下面,另外加入一个名为Label4的标签控件,设置标签的文本为一些提示性的东西(‘Drag to Create Employee’)。通过这个标签,我们可以在AutoCAD中处理拖放。

  要捕捉到什么时候拖动事件发生,我们必须要知道什么时候鼠标开始操作。

  首先,我们要在类的构造函数中注册事件,代码如下:

  Label4.MouseMove += new System.Windows.Forms.MouseEventHandler(Label4_MouseMove);

  2) 在ModelessForm类中加入下面的函数声明:

  private void Label4_MouseMove( object sender, System.Windows.Forms.MouseEventArgs e)

  {

  if (System.Windows.Forms.Control.MouseButtons == System.Windows.Forms.MouseButtons.Left)

  {

  // start dragDrop operation, MyDropTarget will be called when the cursor enters the AutoCAD view area.

  Autodesk.AutoCAD.ApplicationServices.Application.DoDragDrop(this, this, System.Windows.Forms.DragDropEffects.All, new MyDropTarget());

  }

  }

  通常事件处理器有2个输入参数,一个object类的sender和与事件有关的参数。对于MouseMove,我们也要做同样的事情。

  运行这个工程,检查一下当鼠标经过文本的时候,函数是否被调用的。

  我们还可以进一步知道是不是按了鼠标左键:

  if (System.Windows.Forms.Control.MouseButtons == System.Windows.Forms.MouseButtons.Left)

  { }

  我们需要一个方法来检测什么时候对象被拖入到AutoCAD。我们可以使用.NET的基类DropTarget来实现。要使用它,你只要创建从这个基类派生的类并实现你想要的函数。在我们这个例子中,我们需要的是OnDrop()。

  3) 在工程中加入一个从Autodesk.AutoCAD.Windows.DropTarget派生的类‘MyDropTarget’。如果你把这个类加入到ModelessForm.cs文件中,请把这个类加入到ModelessForm类之后。

  override public void OnDrop(System.Windows.Forms.DragEventArgs e)

  {}

  在这个函数中,我们最后会调用AsdkClass1的成员CreateDivision() 和CreateEmployee,传入ModelessForm类中的编辑框的值。要实现这个功能,我们需要一个方法来连接ModelessForm实例。最佳的方法是通过DragEventArgs。但首先我们要把鼠标事件连接到MyDropTarget类。

  4) 加入下面的代码到鼠标左键(MouseButtons.Left)处理函数中:

  Autodesk.AutoCAD.ApplicationServices.Application.DoDragDrop(this, this, System.Windows.Forms.DragDropEffects.All, new MyDropTarget());

  注意我们传入’this’两次。第一次是用于Control参数,第二次是用于传入用户自定义数据。因为我们传入的是ModelessForm 类的实例,所以我们可以在放下的时候使用它来获取编辑框的值。

  5) 回到OnDrop处理函数,让我们使用参数来调用创建雇员的函数。首先,添加职位提示的代码。在AsdkClass1.Create()中已经有相关的代码了,位于‘Get Employees Coordinates…’.注释下面。添加此代码来提示输入职位。

  6) 接下来,获取传入到DragEventArgs 参数的ModelessForm对象:

  ModelessForm ctrl = (ModelessForm)e.Data.GetData(typeof(ModelessForm));

  请注意一下怎样通过typeof关键字把参数强制转化为ModelessForm的实例。

  7) 使用上面的实例来调用AsdkClass1成员:

  AsdkClass1.CreateDivision(ctrl.tb_Division.Text, AsdkClass1.sDivisionManager);

  AsdkClass1.CreateEmployee(ctrl.tb_Name.Text, ctrl.tb_Division.Text, Convert.ToDouble(ctrl.tb_Salary.Text), prPosRes.Value);

  注意:AsdkClass1的方法要不通过AsdkClass1的实例来调用,那么方法必须被声明为’ public static’。因为public static 方法只能调用其它的public static 方法,你需要修改几个AsdkClass1类中的方法为’ public static’。请你进行相关的修改(应该至少有4项要修改)。

  8) 最后,因为我们处理的事件位于AutoCAD命令之外,我们必须再次在会修改数据库的代码处锁住文档。请加入锁住文档的代码,加入的方法与前面的上下文菜单是一样的。

  编译、装载并运行组件,使用PALETTE命令,你应该可以使用拖放操作来创建一个雇员了。

温馨提示:如果您对北大青鸟的学费、专业设置、就业推荐有任何疑问,可以咨询"400-9679-776"与老师沟通!
相关阅读:
  北大青鸟开班信息

9月05日 S1脱产 热招
9月10日 S1脱产 热招
9月12日 S1脱产 热招
9月17日 S1脱产 热招
9月22日 S1业余 热招
订座,报名

  北大青鸟在线报名
   姓 名:  *
 联系电话:  *
 qq:  *
 验证码:
E-mail:
 
  北大青鸟免费讲座
讲座日期: 本周六 点击抢座
讲座时间: 下午1点30分
讲座地点: 北大青鸟华腾校区
主讲老师: 王老师 金牌讲师
讲座主题: 网络安全
讲座内容: 检测、防御、黑客信息,如何过滤不安全的网站,如何防御黑客的进攻。
订座电话: 010-82462067/2167