有时候我们在使用 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的退出功能的更多相关文章

  1. ThinkPHP 分页类的使用及退出功能的实现

    /* ThinkPHP设置编码统一: 一.数据库设置为utf8_bin 二.HTML页面设置charset=utf-8,而且检查文档编码格式是否是utf-8.phpDesigner8设置方式为“文件- ...

  2. 你真的有必要退出吗——再说Android程序的退出功能

    转自你真的有必要退出吗--再说Android程序的退出功能 搞Android开发有一段时间了,相信很多从Windows开发过来的Android程序员都习惯性地会跟我一样遇到过同一个问题:如何彻底退出程 ...

  3. Atitit.用户权限服务 登录退出功能

    Atitit.用户权限服务 登录退出功能 参数说明 /com.attilax/user/loginOut.jsp?url="+url Utype=mer 作者::  ★(attilax)&g ...

  4. go语言实战教程之管理员查询功能、退出功能

    前面第10节课内容中已经学习开发完成了管理员登陆功能.本节课我们将继续学习开发完成管理员信息查询功能.管理员退出功能 管理员信息查询功能 请求及路由映射 管理员信息查询接口 接口名称:获取管理员信息. ...

  5. logout退出功能是怎么实现的?login登陆功能室怎么实现的

    logout退出功能是怎么实现的?login登陆功能室怎么实现的 login就是登陆成功的时候,在session里面创建好用户对应的数据. logout就是登出的时候,在session里面销毁用户对应 ...

  6. element ui 退出功能

    <template> <el-container class="home-wrapper"> <el-header> <el-row ty ...

  7. SpringBoot开发十-开发登录,退出功能

    需求介绍-开发登录,退出功能 访问登录页面:点击头部区域的链接打开登录页面 登录: 验证账号,密码,验证码 成功时生成登录凭证发放给客户端,失败时跳转回登录页面 退出: 将登录状态修改为失效的状态 跳 ...

  8. ionic实现双击返回键退出功能

    实现这个功能需要四个步骤: 步骤一: 说明:因为需要和手机的硬件(返回按钮)打交道,而ionic本身是不具备该功能的,但是有一个东西可以:ng-cordova插件,这个插件是phoneGap为了能让i ...

  9. android中实现“再按一次退出”功能

    首先,定义两次点击退出按钮的时间间隔:private static final long INTERNAL_TIME=2000; 然后,定义一个当前时间的变量:private long exitTim ...

随机推荐

  1. [ionic开源项目教程] - 第8讲 根据菜单分类加载数据(重要)

    [ionic开源项目教程] - 第8讲  根据菜单分类加载数据(重要) [效果图] 注意 今天遇到一个比较棘手的问题,就是左右滑动菜单的设计不合理性,所以tab1.html对应的视图层和control ...

  2. 淘宝主搜索离线集群完成Hadoop 2

    淘宝搜索离线dump集群(hadoop&hbase)2013进行了几次重大升级,本文中将这些升级的详细过程.升级中所遇到的问题以及这些问题的解决方案分享给大家.至此,淘宝主搜索离线集群完全进入 ...

  3. linux下编译软件通用方法(memcached为例)

    1)到软件的官网或其他网站下载软件的源码包 2)解压源码包,并切换到源码目录中 3)使用./configure --help查询配置帮助,里面可能会有安装指南(Installation directo ...

  4. 支持向量机之Hinge Loss 解释

    Hinge Loss 解释 SVM 求解使通过建立二次规划原始问题,引入拉格朗日乘子法,然后转换成对偶的形式去求解,这是一种理论非常充实的解法.这里换一种角度来思考,在机器学习领域,一般的做法是经验风 ...

  5. Java异常体系结构

    1)系统错误(system error)是由Java虚拟机抛出的,用Error类表示.Error类描述的是内部系统错误.这样的错误很少发生.如果发生,除了通知用户以及尽量稳妥地终止程序外,几乎什么都不 ...

  6. JSTL标签用法 详解

    在JSP的开发中,迭代是经常要使用到的操作.例如,逐行的显示查询的结果等.在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出.现在,通过JST ...

  7. PHP String函数分类

    1.查找字符位置函数: strpos  ($str,search,[int]):    查找search在$str中的第一次位置从int开始: stripos ($str,search,[int]): ...

  8. CURL: CURLE_COULDNT_CONNECT问题探究

    摘自::  存储系统研究: socket connect error 99(Cannot assign request address) 这是最近使用libcurl写http服务的压力测试的时候遇到的 ...

  9. [转]Linux之type命令

    转自:http://codingstandards.iteye.com/blog/831504 用途说明 type命令用来显示指定命令的类型.一个命令的类型可以是如下之一 alias 别名 keywo ...

  10. 【LeetCode】168 & 171- Excel Sheet Column Title & Excel Sheet Column Number

    168 - Excel Sheet Column Title Given a positive integer, return its corresponding column title as ap ...