河伯 发表于 2011-1-27 14:19:41

GetKeywords方法默认值问题

下面的命令输入一个关键字:

    <CommandMethod("TT")> Public Sub TT()
      Dim doc As Document = Application.DocumentManager.MdiActiveDocument
      Dim ed As Editor = doc.Editor
      Dim msg As String = "指定偏移距离或 [通过(T)/删除(E)/图层(L)]"
      Dim keywords As String = "Through Erase Layer"
      Dim opt As New PromptKeywordOptions(vbLf & msg, keywords)
      opt.Keywords.Default = "Through"
      opt.AppendKeywordsToMessage = True
      opt.AllowNone = True
      Dim res As PromptResult = ed.GetKeywords(opt)
      If res.Status <> PromptStatus.OK Then
            Return
      End If
      ed.WriteMessage(vbLf & "res.StringResult={0}", res.StringResult)
    End Sub对比一下该命令和AutoCAD offset命令的提示效果:
命令: _offset
指定偏移距离或 [通过(T)/删除(E)/图层(L)] <通过>:
命令: tt
指定偏移距离或 [通过(T)/删除(E)/图层(L)] <通过(T)>:

怎样实现offset命令那样的默认值提示,即不提示括号中的内容?

雪山飞狐_lzh 发表于 2011-1-27 14:45:36

似乎应该用这个?
Editor.GetDistance Method (PromptDistanceOptions)

河伯 发表于 2011-1-27 16:39:17

前面例子仅仅用于说明问题。
类似问题,GetKeywords如何解决?

雪山飞狐_lzh 发表于 2011-1-27 18:02:49

我就是这个意思,:)
你要的效果GetKeywords是实现不了的,只能用其他的Get,并加Keywords

河伯 发表于 2011-1-28 10:47:23

添加下面代码,问题解决,估计AutoCAD东亚语言版本也是这么做的。:)      Dim strDisplay As String = opt.Keywords.GetDisplayString(False)
      Dim i = strDisplay.IndexOf("<")
      Dim j = strDisplay.IndexOf(">")
      If i >= 0 And j >= 0 Then
            Dim strDefault As String = strDisplay.Substring(i, j - i + 1)
            i = strDisplay.IndexOf("(")
            j = strDisplay.IndexOf(")")
            strDefault = strDefault.Remove(i, j - i + 1)
            opt.Message = vbLf & msg & " " & strDefault
            opt.AppendKeywordsToMessage = False
      End If

雪山飞狐_lzh 发表于 2011-1-28 15:15:43

有时间看看这方面的东东,:)
页: [1]
查看完整版本: GetKeywords方法默认值问题