お知らせ

--------------------------------------------------

プログラム作成/コンサルティングの申し込みはこちら

--------------------------------------------------

2010年5月7日金曜日

.NET の勉強 「ダイアログを表示してコマンド実行」(AutoCAD 2011)

金曜日恒例の .NET の勉強をしました。


今までいくつかサンプルを見ながら試してきましたが、そろそろダイアログを出してみたくなってきたので、試してみました。


arxmgd.chm の [Autodesk.AutoCAD.ApplicationServices Namespace] - [Application Class] に ShowModalDialog Method と ShowModelessDialog というのがあるので、きっとこれですね。


まずは、フォームの作成
まずは、Form1.vb (Windows フォーム)を作成して、ボタンをひとつ追加しました。
で、そのボタンをクリックすると、前回の試してみた円を作成して ZOOM を行う、以下の内容が実行されるように記述しました。

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

        acDoc.SendStringToExecute("._circle 2,2,0 4 ", True, False, False)
        acDoc.SendStringToExecute("._zoom _extents ", True, False, False)
    End Sub
End Class



ダイアログの表示
あとは、Form1 を表示するように ShowModalDialog Method または ShowModelessDialog を使えばいいみたいです。

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime

Public Class Class1

    <CommandMethod("test")> _
    Public Sub test()
        Dim f As New Form1()
        Application.ShowModelessDialog(f)
    End Sub
End Class



これで test コマンド実行してみると、ちゃんとダイアログが表示され、ボタンをクリックすると円が作成されて ZOOM が実行されました。


ただし、もう一回 test コマンドを実行すると、またダイアログが表示されました。
コマンドを実行するたびにダイアログが表示されてしまいます。


そこで、ダイアログを表示するところを以下のようにしてみたのですが、ダメでした。

If f.Visible = False Then
    Application.ShowModelessDialog(f)
End If


残念ながら現時点では、どうすればダイアログが既に表示されているかどうかを判断できるかは不明です???


モーダル ダイアログにすれば、ダイアログを閉じないと AutoCAD に戻れないので複数ダイアログが表示されることはないので、とりあえず今回は以下のようにモーダル ダイアログにしてみます。

Application.ShowModalDialog(f)

ただしこのとき、モーダル ダイアログにしたのでダイアログを閉じるコードを Form1.vb の最後に記述しておかないと、ダイアログが自動的に閉じてくれません。
そのため、Form1.vb に以下を追加しました。

 Me.Close()

0 件のコメント:

コメントを投稿