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.
Solved! Go to Solution.
Solved by Hallex. Go to Solution.
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.
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
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'~
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?
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'~
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.
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'~
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.
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'~
Hi,
great suggestion, helped me out 😉
thx, - alfred -
Can't find what you're looking for? Ask the community or share your knowledge.