用keyword实现Editor.GetSelection的退出功能
有时候我们在使用 GetSelection 功能让用户选择实体时,可能会给用户提供一些 keyword 选项,要接收用户选择的 keyword 选项,需要用到 PromptSelectionOptions.KeywordInput 事件。
但是,有时为了有时在用户选择了某个 keyword 项时,需要结束 GetSelection 主操作(这样体验性更好,用户更方便),但是一直没有找到解决的办法,试了好多方法都以失败告终。
今天,有一个功能又需要实现这一点,于是在群里问了一句,胖子说他 QQ 空间里有,于是进去一看,晃然大悟:在keywordInput事件里抛出一个异常即可。
注意:此功能有一个缺陷。如果Editor.GetSelection方法是在一个图形界面中调用的(比如一个 Form,或者 PaletteSet ),那么在你的子命令结束之后,在 CAD 的绘图区域内将看不到鼠标,且在绘图区域中不能进行任何操作,所有 CAD 命令的失效,CAD 关闭按钮失效;这些是我注意到的异常,或许还会有别的异常。
而如果 GetSelection 是如下文代码一样,放在一个自定义的 CAD 命令中,且调用的时候是通过 CAD 命令调用的,则没有问题。所以如果需要在图形界面中用到 GetSelection 退出功能, 可以将实现代码封装成一个自定义命令,然后在图形界面中用 Docuemnt.SendStringToExcute 方法调用你的自定义命令。但有如果在你的GetSelection子命令完成之后还需要与你的图形界面进行交互,目前还没有非常合适的解决的办法,有几种初步的想法:
1、在SendStringToExcute的时候先把图形界面关闭掉,然后在 GetSelection 子命令结束之后,重新初始化窗体,并根据 GetSelection 执行结果来操作窗体。
2、将窗体对象定义为全局对象,且窗体中的控件的Modifiers属性设为 Public 或 Protected,这样就可以在自定义命令中直接操作窗体中的控件。
3、将窗体对象定义为全局对象,将对窗体中控件的操作封装成方法,然后在自定义命令中直接调用这些方法完成图形界面的操作。
[CommandMethod("SELKW")]
publicvoid GetSelectionWithKeywords()
{
Document doc =
Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
// Create our options object
PromptSelectionOptions pso = newPromptSelectionOptions();
// Add our keywords
pso.Keywords.Add("FIrst");
pso.Keywords.Add("Second");
// Set our prompts to include our keywords
string kws = pso.Keywords.GetDisplayString(true);
pso.MessageForAdding =
"\nAdd objects to selection or " + kws;
pso.MessageForRemoval =
"\nRemove objects from selection or " + kws;
pso.KeywordInput +=
newSelectionTextInputEventHandler(pso_KeywordInput);
PromptSelectionResult psr = null;
try
{
psr = ed.GetSelection(pso);
if (psr.Status == PromptStatus.OK)
{
//your logic
}
}
catch (System.Exception ex)
{
if (ex is Autodesk.AutoCAD.Runtime.Exception)
{
Autodesk.AutoCAD.Runtime.Exception aEs =
ex as Autodesk.AutoCAD.Runtime.Exception;
//user has pressed keyword.
if (aEs.ErrorStatus ==
Autodesk.AutoCAD.Runtime.ErrorStatus.OK)
{
ed.WriteMessage("\nKeyword entered: {0}",
ex.Message);
}
else
{
//other exception, please handle
}
}
}
}
void pso_KeywordInput(object sender, SelectionTextInputEventArgs e)
{
//user has pressed keyword, so throw Exception
throw new Autodesk.AutoCAD.Runtime.Exception(
Autodesk.AutoCAD.Runtime.ErrorStatus.OK, e.Input);
}
用keyword实现Editor.GetSelection的退出功能的更多相关文章
- ThinkPHP 分页类的使用及退出功能的实现
/* ThinkPHP设置编码统一: 一.数据库设置为utf8_bin 二.HTML页面设置charset=utf-8,而且检查文档编码格式是否是utf-8.phpDesigner8设置方式为“文件- ...
- 你真的有必要退出吗——再说Android程序的退出功能
转自你真的有必要退出吗--再说Android程序的退出功能 搞Android开发有一段时间了,相信很多从Windows开发过来的Android程序员都习惯性地会跟我一样遇到过同一个问题:如何彻底退出程 ...
- Atitit.用户权限服务 登录退出功能
Atitit.用户权限服务 登录退出功能 参数说明 /com.attilax/user/loginOut.jsp?url="+url Utype=mer 作者:: ★(attilax)&g ...
- go语言实战教程之管理员查询功能、退出功能
前面第10节课内容中已经学习开发完成了管理员登陆功能.本节课我们将继续学习开发完成管理员信息查询功能.管理员退出功能 管理员信息查询功能 请求及路由映射 管理员信息查询接口 接口名称:获取管理员信息. ...
- logout退出功能是怎么实现的?login登陆功能室怎么实现的
logout退出功能是怎么实现的?login登陆功能室怎么实现的 login就是登陆成功的时候,在session里面创建好用户对应的数据. logout就是登出的时候,在session里面销毁用户对应 ...
- element ui 退出功能
<template> <el-container class="home-wrapper"> <el-header> <el-row ty ...
- SpringBoot开发十-开发登录,退出功能
需求介绍-开发登录,退出功能 访问登录页面:点击头部区域的链接打开登录页面 登录: 验证账号,密码,验证码 成功时生成登录凭证发放给客户端,失败时跳转回登录页面 退出: 将登录状态修改为失效的状态 跳 ...
- ionic实现双击返回键退出功能
实现这个功能需要四个步骤: 步骤一: 说明:因为需要和手机的硬件(返回按钮)打交道,而ionic本身是不具备该功能的,但是有一个东西可以:ng-cordova插件,这个插件是phoneGap为了能让i ...
- android中实现“再按一次退出”功能
首先,定义两次点击退出按钮的时间间隔:private static final long INTERNAL_TIME=2000; 然后,定义一个当前时间的变量:private long exitTim ...
随机推荐
- timer的使用
; private void timer1_Tick(object sender, EventArgs e) //定时执行事件 { button1.Text = i.ToString();//显示按钮 ...
- ASP.NET MVC 4 WebAPI. Support Areas in HttpControllerSelector
This article was written for ASP.NET MVC 4 RC (Release Candidate). If you are still using Beta versi ...
- UIImagePicker照片选择器
UIImagePickerController 1.+(BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType ...
- mac下编译optool方法
参考地址:http://www.mopsled.com/2016/build-optool-osx/ 1.git clone https://github.com/alexzielenski/opto ...
- Typed Message模式与Event Sourcing
引言 在<设计模式沉思录>(Pattern Hatching: Design Patterns Applied,[美]JohnVlissides著)一书的第4章中,围绕事件Message传 ...
- python练习程序(c100经典例19)
题目: 一个数如果恰好等于它的因子之和,这个数就称为“完数”.例如6=1+2+3.编程找出1000以内的所有完数. def foo(a): sra=a; lis=[1]; while 1: for i ...
- strust2 配置chainAction结果类型的配置
<result name="chainAction" type="chain"> <param name="actionName&q ...
- 《Unix网络编程》卷2 读书笔记 第1章-简介
1. 概述 2. 进程.线程与信息共享 Unix进程间的信息共享有多种方式:注意下图中内核的位置 左边的两个进程共享存留于文件系统中某个文件上的某些信息.为访问这些信息,每个进程都得穿越内核. 中 ...
- 二:ZooKeeper术语概念
一:Zookeeper的设计目标 -->Zookeeper致力于提供一个高性能,高可用,且具有严格的顺序访问控制能力(主要是写操作的严格顺行性)的分布式协调服务. -->高性能使得Zo ...
- C#中的选择查询相关
看代码实现: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...