GetString with Keywords FATAL ERROR

GetString with Keywords FATAL ERROR

Anonymous
Not applicable
3,295 Views
11 Replies
Message 1 of 12

GetString with Keywords FATAL ERROR

Anonymous
Not applicable

Hi,

i encountered a problem, when I try to use GetString with Keywords

 

Dim optString As New PromptStringOptions("Zadaj nazov: ")
optString.Keywords.Add("Vypisat")

Dim resPrompt As PromptResult = ed.GetString(optString)

 

AutoCAD crashes with FATAL ERROR on the last line.

0 Likes
Accepted solutions (1)
3,296 Views
11 Replies
Replies (11)
Message 2 of 12

Paulio
Advocate
Advocate

You need to use PromptKeywordOptions like this:

 

            Dim optstring As New PromptKeywordOptions("Zadaj nazov: ")
            optstring.Keywords.Add("Vypisat")
            Dim resPrompt As PromptResult = ed.GetKeywords(optstring)

 Hope that helps.

0 Likes
Message 3 of 12

Hallex
Advisor
Advisor

You can't add keywords to Getstring method

But you might be want to use DefaultValue property

to get possibility for empty input

And also you always use Try.. Catch statement to

save your working time Smiley Happy

See sample:

        Public Sub testkwords()
            Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
            Dim db As Database = doc.Database
            Dim ed As Editor = doc.Editor
            Try
                Dim optString As New PromptStringOptions("Zadaj nazov: ")
                optString.UseDefaultValue = True
                optString.AppendKeywordsToMessage = True
                optString.DefaultValue = "Vypisat"
                Dim resPrompt As PromptResult = ed.GetString(optString)
                If resPrompt.Status <> PromptStatus.OK Then
                    Return
                End If
                Dim strRes As String = resPrompt.StringResult
                MsgBox(strRes)
            Catch ex As System.Exception
                MsgBox(ex.Message + vbCrLf + ex.StackTrace)
            Finally

            End Try
        End Sub

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
0 Likes
Message 4 of 12

Anonymous
Not applicable

to Paulio: keyword prompt only allows to enter keyword, i want an user inputed string, or a keyword

 

to Hallex: Thanks for the workaround. That's strange, that PromptStringOptions has a Property Keywords and then throws an exception saying Keywords are not allowed.

I think that I will have to stick with this, but it's strange to have a Keyword in <> instead of [], very odd behavior. Whay if I wanted to have more than one keyword?

 

 

0 Likes
Message 5 of 12

Hallex
Advisor
Advisor

If you need to add more than one keyword

you have to use ed.getkword method, see examples,

hope you will be undrerstand how to use this functions,

feel free to adopt them to your needs:

        Function PromptKeyWords(ByVal PromptStr As String, ByVal kwords As String(), ByVal deflt As String) As Boolean
            Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor

            Dim prOpt As PromptKeywordOptions = New PromptKeywordOptions(PromptStr)
            Dim prRes As PromptResult = Nothing
            prOpt.AppendKeywordsToMessage = True
            For Each wd As String In kwords
                prOpt.Keywords.Add(wd)
            Next
            prOpt.Keywords.Default = deflt
            prOpt.SetMessageAndKeywords(PromptStr, "[Yes/No]")
            prOpt.Keywords.Add("[")

            prOpt.Keywords.Add("[")

            prOpt.AppendKeywordsToMessage = True

            prRes = ed.GetKeywords(prOpt)

            If prRes.Status = PromptStatus.Cancel Then
                MsgBox("Error: user cancelled")
                Return False
            Else
                MsgBox(prRes.StringResult)
                Return True
            End If

        End Function


        Public Shared Function GetKwordOut(ByVal ed As Editor, ByVal msg As String, ByVal kwords As String()) As String
            Dim pko As New PromptKeywordOptions(vbLf + msg)
            pko.AllowNone = True

            For Each itm As String In kwords
                pko.Keywords.Add(itm)
            Next
            pko.Keywords.Default = kwords.GetValue(kwords.Length - 1).ToString()
            Dim pkr As PromptResult = ed.GetKeywords(pko)
            If pkr.Status <> PromptStatus.OK Then
                Return String.Empty
            Else
                Return pkr.StringResult
            End If
        End Function

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
0 Likes
Message 6 of 12

Anonymous
Not applicable

Hallex, you didn't understand what I meat.

 

I want a string prompt, i want user to be able to enter a string, any string and also be able to choose a keyword for some action. But I guess it's not possible.

0 Likes
Message 7 of 12

Hallex
Advisor
Advisor
Accepted solution

Sorry, Matus

I have disagreed completely

You didn't understand how to use the function I posted

Please, try complete solution:

       <CommandMethod("MatusBrilt", "matus", CommandFlags.Modal)> _
    Public Sub SampleTest()
        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        Dim kwords As String() = {"Rectangle", "Circle", "Ellipse", "Squiggle"}
        Dim strout As String = GetKwordOut(ed, vbLf + "Choose a Shape Type or Enter Another Type You Want: ", kwords)
        ed.WriteMessage(vbLf + "{0}", strout)
    End Sub



    Public Shared Function GetKwordOut(ByVal ed As Editor, ByVal msg As String, ByVal kwords As String()) As String
        Dim pko As New PromptKeywordOptions(vbLf + msg)
        pko.AllowNone = True
        pko.AllowArbitraryInput = True
        For Each itm As String In kwords
            pko.Keywords.Add(itm)
        Next
        pko.Keywords.Default = kwords.GetValue(kwords.Length - 1).ToString()
        Dim pkr As PromptResult = ed.GetKeywords(pko)
        If pkr.Status <> PromptStatus.OK Then
            Return String.Empty
        Else
            Return pkr.StringResult
        End If
    End Function

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
Message 8 of 12

Anonymous
Not applicable

If I enter anything else in the eg.GetKeywords prompt, I get an error "Invalid option keyword." and I am prompted again.

 

I use AutoCAD 2012.

0 Likes
Message 9 of 12

Hallex
Advisor
Advisor

You have to copy code I posted in the last post because I've added

ArbitaryInput=True in this function

Then it will be work as you need, see what I have a got after running the code

(tested on 2010th) :

 

 

Command: MATUS Choose a Shape Type or Enter Another Type You Want [Rectangle/Circle/Ellipse/Squiggle] <Squiggle>: Trapezoid

 Trapezoid

 Command:

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
0 Likes
Message 10 of 12

Anonymous
Not applicable

oh, finally 🙂

 

thank you very much, I missed that one

0 Likes
Message 11 of 12

Hallex
Advisor
Advisor

You're welcome

Happy coding Smiley Happy

 

~'J'~

_____________________________________
C6309D9E0751D165D0934D0621DFF27919
0 Likes
Message 12 of 12

Alfred.NESWADBA
Consultant
Consultant

Hi,

 

great suggestion, helped me out 😉

 

thx, - alfred -

------------------------------------------------------------------------------------
Alfred NESWADBA
ISH-Solutions GmbH / Ingenieur Studio HOLLAUS
www.ish-solutions.at ... blog.ish-solutions.at ... LinkedIn ... CDay 2026
------------------------------------------------------------------------------------

(not an Autodesk consultant)
0 Likes