本帖最后由 transteel 于 2025-8-7 08:02 编辑

昨晚学会了用PromptKeywordOptions添加keywords【昨晚的帖子】,想着今晚上实现一下,结果因为中望.Net中PromptKeywordOptions对象的一个bug折腾了一晚上——最后还是换了ACAD才发现问题所在。

下面的代码在ACAD中是正常的,但是在ZWCAD中,获取的总是第一个keyword的值。
  1. ' 创建 PromptKeywordOptions 实例并设置关键词
  2. Dim promptString As New PromptKeywordOptions(vbCrLf & $"选择管线类型")

  3. ' 正确添加关键词项,键值是显示的名称,值是对应的选择标识符
  4. promptString.Keywords.Add("SC-1钢管", "SC-1钢管")
  5. promptString.Keywords.Add("SC-2钢管", "SC-2钢管")

  6. ' 获取用户选择的选项
  7. Dim result As PromptResult = ed.GetKeywords(promptString)

  8. If result.Status <> PromptStatus.OK Then
  9.     Return
  10. End If

  11. ' 检查用户选择的状态
  12. If result.Status = PromptStatus.OK Then
  13.     wipeLineType = result.StringResult.Replace("-", "×")
  14. End If



ACAD中的效果:


ZWCAD中的效果,不能正确获取keyword:





网友答: 本帖最后由 sieben 于 2025-8-7 08:40 编辑

把关键字换一下应该可以的,特别的,最好不要S开头,特别的,最好使用全英文大写字母;关键字这里ZWCAD和ACAD细节不同游戏规则不同而已,两者半斤八俩。

网友答: 本帖最后由 你有种再说一遍 于 2025-8-7 17:41 编辑

看来阿望的bug蛮多的,
要么阿望自己修,要么你来修,
而且我怎么记得这个bug在浩辰身上也见过呢...

修复方案
子类化窗体抓取窗体过程消息,看看它到底响应了什么消息.
如果有关键字输入消息,就可以从一个map上面执行指定动作.
得自己构造关键字静态字段:
map[命令, map[keyword, action]]

如果真的搞不定,
可以不用关键字配置,用键盘+鼠标钩子去联动自己的非模态窗口.

网友答: 本帖最后由 d1742647821 于 2025-8-7 10:00 编辑

首先你这个用法是不对的,昨天已经回复过你了,在AutoCad上能跑只能说明AutoCad的鲁棒性比较强,不能跑也是正常的。
写对了就能跑了




网友答: 本帖最后由 transteel 于 2025-8-7 20:56 编辑
d1742647821 发表于 2025-8-7 09:55
首先你这个用法是不对的,昨天已经回复过你了,在AutoCad上能跑只能说明AutoCad的鲁棒性比较强,不能跑也是 ...

十分感谢!按照您的思路确实可以的。不过中望.net的keyword对象的add方法确实也接受一个参数(或两个参数),按照3楼sieben的说法,一个参数的情况下也可以返回正确的关键字。另外我还发现关键字不能带“×”“*”之类的,就不去求甚解了,能用就行。

网友答: 本帖最后由 落魄山人 于 2025-8-7 21:18 编辑

何德何能,你的问题两位ifox的领导者来回答你。。。真是羡慕
"Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/Add/Remove/Multiple/Previous/Undo/AUto/Single".
大概这些关键字不要直接用,不然有可能会出现非预期效果的问题。


网友答:
落魄山人 发表于 2025-8-7 21:16
何德何能,你的问题两位ifox的领导者来回答你。。。真是羡慕
"Window/Last/Crossing/BOX/ALL/Fence/WPolyg ...

哈哈哈!何德何能!何德何能啊!大概因为坚持搞技术的大概率都是热心肠,不会因为问题简单就视而不见的吧!(同样感谢你)
  • 上一篇:运行在CAD上显示当前天气的插件
  • 下一篇:没有了