C#
form
textbox
Control
inifile

C#でフォームのtextbox等に紐づけてinifileの書込/読込を勝手にやってくれるライブラリ

Inifileは未だに結構使われている。
つかいやすいのが一番の理由。
XMLとか、直接開いて使うのは結構大変なので。

自分のソフトはこんなのを使っています。
ソースは以下。
https://github.com/kumokumocc/WORK_/tree/master/classlib/cs/IniFile

使い方はこんな感じ。

    /// <summary>
    /// 名称と、保存用フォームを設定します。フォームは、アプリケーション終了時、Form_Closedイベントが呼ばれるフォームである必要があります。
    /// そうでない場合は、IPアドレス、ポートの値が保存されません。
    /// </summary>
    /// <param name="name"></param>
    /// <param name="form"></param>
    public void InputData(string name, Form form)
    {
        this.Text = name;
        m_Form = form;
        new inifile.CInifile_Form(IniFileSection, "IpAddress", "0.0.0.0", form, textBox_IP, false);
        new inifile.CInifile_Form(IniFileSection, "Port", "81", form, textBox_PORT, false);
        new inifile.CInifile_Form(IniFileSection, "IpAddress_Bind", "0.0.0.0", form, textBox_BindIp, false);
        new inifile.CInifile_Form(IniFileSection, "Port_Bind", "81", form, textBox_BindPort,false);
        new inifile.CInifile_CheckBox(IniFileSection, "IsBind", false, form, checkBox_Bind, false);
        new inifile.CInifile_CheckBox(IniFileSection, "IsSndCRLF", false, form, checkBox_CRLF, false);
        m_Socket = new MySocket(this, label_SocketStatusSend,textBox_Log);

        m_StatusCtrl = new global::Status.StatusCtrl(textBox_Status);
        m_StatusCtrl.Start(new Status.Closed(this));

        timer_Update.Enabled = true;


    }

自分の書くコードにはこんな感じで使っています。

new inifile.CInifile_Form(IniFileSection, "IpAddress", "0.0.0.0", form, textBox_IP, false);

なんだこれ、って感じですが、意外と簡単。

inifile.CInifile_Formというのは、Form上のオブジェクトとinifileの設定値を紐づけるクラスです。
第1引数のIniFileSectionは、セクション名。固定値でconst宣言されています。

第2引数はKey。"IpAddress"は文字通りIPアドレスです。

第3引数はデフォルト値。inifile中に指定する項目がなかったときの値です。

第4引数は基本的にはメインの×を押されるフォームです。
このフォームがクリエイトされたときにinifileにアクセスしてデータを読込、クローズされたときにinifileにデータを書き込みます。

第5引数は値を書き込むオブジェクトです。
IP表示用のテキストボックスです。
起動中に書き換えられた場合は、書き換わったアドレスをクローズ時に保存します。

第6引数は、ReadOnlyです。
読み取り専用ならtrueを入れます。trueが入っていたらクローズ時に値を書き込みません。

起動時と終了時しかチェックしていないので、強制終了するとinifileの値は変わりませんが、それ以外はほぼ問題なく使えます。

見えない設定値は危険なので、もしinifileに値が書き込まれていなかった場合にもクローズ時にはデフォルト値を書き込みます。

inifileはexeと同じディレクトリのinifile.iniに書き込まれます。
中身はこんな感じ。

[Sock_Client]
IpAddress=192.168.0.12
Port=8802
IpAddress_Bind=192.168.0.16
Port_Bind=49317

inifile.CInifile_CheckBoxも基本全く同じで、チェックボックスだと値がtrueかfalseかなのでそれに合わせて作っているだけです。
他にコンボボックスもあります。(前回の値を保持して入れているだけですが)

複数コントロールを配列のように扱うものもありますね。さすがにこれはそんなに使ったことないので、ちゃんと動くかな。

次はシリアル通信でも。