development of

Tieghaに関する備忘録とおまけ

【IJCAD】ダイアログの前回値を保存を行う方法

ダイアログの前回値はレジストリに書き込める!

ダイアログの値を保持する方法についてはいろいろ考えられますが、IJCAD の .NET API を使用して IJCAD のレジストリに前回値を保存することができます。

UserConfigurationManager クラスの OpenDialogSection メソッドを使用することで、レジストリ内の IJCAD で表示される、各ダイアログのセクションを扱う IConfigurationSection オブジェクトを取得できます。

あとは、 IConfigurationSection インターフェースの、WriteProperty メソッドで前回値をレジストリに書き込むことができて、ReadProperty メソッドでレジストリに書き込まれている前回値の読み込みができます。

サンプルコード

// ウィンドウフォームがロードされたとき
private void SampleForm_Load(object sender, EventArgs e)
{
    // UserConfigurationManagerオブジェクトを取得
    var ucm = GrxCAD.ApplicationServices.Application.UserConfigurationManager;

    // レジストリのセクションを取得
    var section = ucm.OpenDialogSection(this);

    if (section != null)
    {
        // テキストボックスの内容をレジストリから読み込む
        textBox1.Text = System.Convert.ToString(section.ReadProperty(textBox1.Name, ""));

        // チェックボックスの内容をレジストリから読み込む
        checkBox1.Checked = System.Convert.ToBoolean(section.ReadProperty(checkBox1.Name, false));
        checkBox2.Checked = System.Convert.ToBoolean(section.ReadProperty(checkBox2.Name, false));
        checkBox3.Checked = System.Convert.ToBoolean(section.ReadProperty(checkBox3.Name, false));

        // ラジオボタンの内容をレジストリから読み込む
        radioButton1.Checked = System.Convert.ToBoolean(section.ReadProperty(radioButton1.Name, true));
        radioButton2.Checked = System.Convert.ToBoolean(section.ReadProperty(radioButton2.Name, false));
    }
}
// ウィンドウフォームが閉じられるとき
private void SampleForm_FormClosing(object sender, FormClosingEventArgs e)
{
    // UserConfigurationManagerオブジェクトを取得
    var ucm = GrxCAD.ApplicationServices.Application.UserConfigurationManager;

    // レジストリのセクションを取得
    var section = ucm.OpenDialogSection(this);

    if (section != null)
    {
        // テキストボックスの内容をレジストリに書き込む
        section.WriteProperty(textBox1.Name, $"{textBox1.Text}");

        // チェックボックスの内容をレジストリに書き込む
        section.WriteProperty(checkBox1.Name, $"{checkBox1.Checked}");
        section.WriteProperty(checkBox2.Name, $"{checkBox2.Checked}");
        section.WriteProperty(checkBox3.Name, $"{checkBox3.Checked}");

        // ラジオボタンの内容をレジストリに書き込む
        section.WriteProperty(radioButton1.Name, $"{radioButton1.Checked}");
        section.WriteProperty(radioButton2.Name, $"{radioButton2.Checked}");
    }

}

実行結果

f:id:tknmt:20190404105622g:plain

サンプルコードではダイアログのロード時に、レジストリから値を取得して各コントロールに設定し、ダイアログを閉じる時にレジストリへ値を書き込んでいます。
書き込んだ値は下記のレジストキーに追加されます。

HKEY_CURRENT_USER\Software\IntelliJapan\IJCAD Professional\R19\ja-jp\Profiles{プロファイル名}\Dialogs{ダイアログのクラス名}

f:id:tknmt:20190404105751p:plain

IJCAD の API ではブール型が何故か値は扱えなかったので、チェックボックスの値を文字列に変換しています。