LoginSignup
0
1

More than 5 years have passed since last update.

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

Posted at

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かなのでそれに合わせて作っているだけです。
他にコンボボックスもあります。(前回の値を保持して入れているだけですが)

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

次はシリアル通信でも。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1