ユーザ入力をコントロールする(.NET)

ユーザからの入力を収集するときに、目的の結果を得られるように入力できる情報の種類を制限することがあります。コマンド プロンプトに表示するプロンプトを定義するだけでなく、ユーザが入力できる内容を制限するために、多様なプロンプト オプション オブジェクトが使用されます。入力メソッドによっては、使用するメソッドの種類に基づいた戻り値を取得できるだけでなく、キーワードも取得できます。

たとえば、GetPoint メソッドを使用して、ユーザが点を指定するかキーワードで回答するようにすることができます。次に、LINE[線分]、CIRCLE[円]、PLINE[ポリライン]などのコマンドの機能を示します。

整数値またはキーワードを取得する

次の例は、正のゼロではない整数値またはキーワードの入力をユーザに要求します。

VB.NET

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

C#

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());
    }
}

VBA/ActiveX コード リファレンス

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