When collecting input from the user, you want to make sure you limit the type of information they can enter so you can get the desired response. The various prompt option objects are used to not only define the prompt displayed at the Command prompt, but also restrict the input that the user can provide. With some of the input methods, not only can you get a return value based on the type of method used but also get a keyword.
For example, you can use the GetPoint method to have the user specify a point or respond with a keyword. This is how commands like LINE, CIRCLE, and PLINE work.
The following example prompts the user for a positive non-zero integer value or a keyword.
Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD.Runtime <CommandMethod("GetIntegerOrKeywordFromUser")> _ Public Sub GetIntegerOrKeywordFromUser() Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim pIntOpts As PromptIntegerOptions = New PromptIntegerOptions("") pIntOpts.Message = vbCrLf & "Enter the size or " '' Restrict input to positive and non-negative values pIntOpts.AllowZero = False pIntOpts.AllowNegative = False '' Define the valid keywords and allow Enter pIntOpts.Keywords.Add("Big") pIntOpts.Keywords.Add("Small") pIntOpts.Keywords.Add("Regular") pIntOpts.Keywords.Default = "Regular" pIntOpts.AllowNone = True '' Get the value entered by the user Dim pIntRes As PromptIntegerResult = acDoc.Editor.GetInteger(pIntOpts) If pIntRes.Status = PromptStatus.Keyword Then Application.ShowAlertDialog("Entered keyword: " & _ pIntRes.StringResult) Else Application.ShowAlertDialog("Entered value: " & _ pIntRes.Value.ToString()) End If End Sub
using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; [CommandMethod("GetIntegerOrKeywordFromUser")] public static void GetIntegerOrKeywordFromUser() { Document acDoc = Application.DocumentManager.MdiActiveDocument; PromptIntegerOptions pIntOpts = new PromptIntegerOptions(""); pIntOpts.Message = "\nEnter the size or "; // Restrict input to positive and non-negative values pIntOpts.AllowZero = false; pIntOpts.AllowNegative = false; // Define the valid keywords and allow Enter pIntOpts.Keywords.Add("Big"); pIntOpts.Keywords.Add("Small"); pIntOpts.Keywords.Add("Regular"); pIntOpts.Keywords.Default = "Regular"; pIntOpts.AllowNone = true; // Get the value entered by the user PromptIntegerResult pIntRes = acDoc.Editor.GetInteger(pIntOpts); if (pIntRes.Status == PromptStatus.Keyword) { Application.ShowAlertDialog("Entered keyword: " + pIntRes.StringResult); } else { Application.ShowAlertDialog("Entered value: " + pIntRes.Value.ToString()); } }
Sub GetIntegerOrKeywordFromUser() ' The first parameter of InitializeUserInput (6) ' restricts input to positive and non-negative ' values. The second parameter is the list of ' valid keywords. ThisDrawing.Utility.InitializeUserInput 6, "Big Small Regular" ' Set the prompt string variable Dim promptStr As String promptStr = vbCrLf & "Enter the size or [Big/Small/Regular] <Regular>:" ' At the GetInteger prompt, entering a keyword or pressing ' ENTER without entering a value results in an error. To allow ' your application to continue and check for the error ' description, you must set the error handler to resume on error. On Error Resume Next ' Get the value entered by the user Dim returnInteger As Integer returnInteger = ThisDrawing.Utility.GetInteger(promptStr) ' Check for an error. If the error number matches the ' one shown below, then use GetInput to get the returned ' string; otherwise, use the value of returnInteger. If Err.Number = -2145320928 Then Dim returnString As String Debug.Print Err.Description returnString = ThisDrawing.Utility.GetInput() If returnString = "" Then 'ENTER returns null string returnString = "Regular" 'Set to default End If Err.Clear Else 'Otherwise, returnString = returnInteger 'Use the value entered End If ' Display the result MsgBox returnString, , "InitializeUserInput Example" End Sub