イベントは、ユーザがユーザ フォーム上のコントロールを操作した結果だけでなく、事前定義されたアクションがユーザ フォームに対して発生したときにもトリガされます。
[AutoCAD Objects]フォルダを開くと(すでに開いている場合もあります)、図面のアイコンと ThisDrawing という名前が表示されます。[フォーム]フォルダを開くと(すでに開いている場合もあります)、フォームのアイコンと、今作成したフォームの名前 gpDialog が表示されます。
次の手順では、プロジェクト エクスプローラ ウィンドウを使用する方法を学習します。
コード ウィンドウでコード モジュールが開き、フォーム エディタ ウィンドウでユーザ フォームが開きます。
次の手順では、ThisDrawing モジュールの既存のコードを更新します。
Public trad As Double ' Updated Public tspac As Double ' Updated Public tsides As Integer ' Add Public tshape As String ' Add
変数は、ユーザ フォームのコードからアクセスして修正できるように、Public として設定する必要があります。tsides 変数はポリゴン タイルの辺数を保持し、tshape 変数は選択されたタイルの形状(円形またはポリゴン)を保持します。
trad = ThisDrawing.Utility.GetDistance(sp, "Radius of tiles: ") tspac = ThisDrawing.Utility.GetDistance(sp, "Spacing between tiles: ")
アポストロフィを追加すると、コード文がコメントになるので、コードの実行は許可されなくなり、プロジェクトにコードを保持できるようになります。コードは、次のようになっているはずです。
' trad = ThisDrawing.Utility.GetDistance(sp, "Radius of tiles: ") ' tspac = ThisDrawing.Utility.GetDistance(sp, "Spacing between tiles: ")
' Load and display the Garden Path user form Load gpDialog gpDialog.Show
' Draw the tile with the designated shape Sub DrawShape(pltile) Dim angleSegment As Double Dim currentAngle As Double Dim angleInRadians As Double Dim currentSide As Integer Dim varRet As Variant Dim aCircle As AcadCircle Dim aPolygon As AcadLWPolyline ReDim points(1 To tsides * 2) As Double ' Branch based on the type of shape to draw Select Case tshape Case "Circle" Set aCircle = ThisDrawing.ModelSpace.AddCircle(pltile, trad) Case "Polygon" angleSegment = 360 / tsides currentAngle = 0 For currentSide = 0 To (tsides - 1) angleInRadians = dtr(currentAngle) varRet = ThisDrawing.Utility.PolarPoint(pltile, angleInRadians, trad) points((currentSide * 2) + 1) = varRet(0) points((currentSide * 2) + 2) = varRet(1) currentAngle = currentAngle + angleSegment Next currentSide Set aPolygon = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) aPolygon.Closed = True End Select End Sub
Set cir = ThisDrawing.ModelSpace.AddCircle(pltile, trad)
DrawShape pltile ' Updated
次の手順では、gpDialog ユーザーフォームにコードを追加して、フォームのコントロールの動作とユーザ フォームがロードされたときに起こることを定義します。
gp_tsides.Enabled = True ThisDrawing.tshape = "Polygon"
このコードは、gp_tsides テキスト ボックスを有効にし、ThisDrawing モジュールの tshape 変数を文字列 Polygon に設定します。
gp_tsides.Enabled = False ThisDrawing.tshape = "Circle"
このコードは、gp_tsides テキスト ボックスを無効にし、ThisDrawing モジュールの tshape 変数を文字列 Circle に設定します。
Private Sub accept_Click() If ThisDrawing.tshape = "Polygon" Then ThisDrawing.tsides = CInt(gp_tsides.text) If (ThisDrawing.tsides < 3#) Or (ThisDrawing.tsides > 1024#) Then MsgBox "Enter a value between 3 and " & _ "1024 for the number of sides." Exit Sub End If End If ThisDrawing.trad = CDbl(gp_trad.text) ThisDrawing.tspac = CDbl(gp_tspac.text) If ThisDrawing.trad < 0# Then MsgBox "Enter a positive value for the radius." Exit Sub End If If (ThisDrawing.tspac < 0#) Then MsgBox "Enter a positive value for the spacing." Exit Sub End If GPDialog.Hide End Sub
このコードは、ユーザがタイルの形状としてポリゴンを選択し、ポリゴンの有効な辺数を指定したかどうかをテストします。テキスト ボックスに入力された半径と間隔の値は変数 trad と tspac に保存されます。条件文も、trad と tspac の値が 0 (ゼロ)でないことを確認するために使用されます。
値が取得され、検証された後、gpDialog.Hide 文によってフォームが非表示にされ、最初にフォームを呼び出したサブルーチンにコントロールが戻されます。
Private Sub cancel_Click() Unload Me End End Sub
このイベント ハンドラは、フォームをロード解除し、マクロ全体を終了します。
Private Sub UserForm_Initialize() gp_circ.Value = True gp_trad.Text = ".2" gp_tspac.Text = ".1" gp_tsides.Text = "5" gp_tsides.Enabled = False ThisDrawing.tsides = 5 End Sub
このイベント ハンドラは、ユーザ フォームがセッションで初めてロードされたときに実行されます。
次の手順では、gpDialog ユーザ フォームに追加したコードをテストします。