ニコニコ生放送用コメントビューア「やります!アンコちゃん」 公式wikiです。

開発者向け For developers page.

シリアライズで適当XML

設定ファイルでXMLを多用していますが、iniファイルより楽に扱えるからです。
iniファイルはその場で直接ピンポイントでいじれる利点もありますが、.netで推奨じゃないらしいのでそこはMSの意向に合わせといたほうが無難なのかなとおもって。

設定用のクラスを作っておきます[Serializable]という属性を付けておくのがミソです。
これ単独でクラスファイルにするときはusing System.ComponentModel;を先頭にかいておいてください。

    [Serializable]
    public class StyleSetting
    {
        //[DisplayName("フォーム文字")]
        public string Color_form_fore { get; set; }

        //[DisplayName("フォーム背景")]
        public string Color_form_back { get; set; }

        //[DisplayName("toolメニューコンテナ背景top")]
        public string Color_toolmenuContTop_back { get; set; }

        //[DisplayName("toolメニューコンテナ背景bottom")]
        public string Color_toolmenuContBot_back { get; set; }

        //[DisplayName("toolメニューパネル")]
        public string Color_toolmenuContPanel_back { get; set; }

        //[DisplayName("toolメニュー背景")]
        public string Color_toolmenu_back { get; set; }

        //[DisplayName("toolメニュー文字")]
        public string Color_toolmenu_fore { get; set; }

        //[DisplayName("statusStrip")]
        public string Color_statusStrip_back { get; set; }

        //[DisplayName("statusStrip")]
        public string Color_statusStrip_fore { get; set; }

        //[DisplayName("メニュー背景")]
        public string Color_menu_back { get; set; }

        //[DisplayName("メニュー文字")]
        public string Color_menu_fore { get; set; }

        //[DisplayName("情報パネル背景")]
        public string Color_info_back { get; set; }

        //[DisplayName("情報パネルラベル")]
        public string Color_infolabel_fore { get; set; }

        //[DisplayName("情報パネル文字")]
        public string Color_info_fore { get; set; }

        //[DisplayName("チャットウインドウ背景")]
        public string Color_chat_back { get; set; }

        //[DisplayName("チャットウインドウ文字")]
        public string Color_chat_fore { get; set; }

        //[DisplayName("チャットウインドウテキストエリア")]
        public string Color_chattext_back { get; set; }

        //[DisplayName("FaitalMessage")]
        public string Color_Faital { get; set; }

        //[DisplayName("StatusMessage")]
        public string Color_Status { get; set; }

        //[DisplayName("Linked")]
        public string Color_Linked { get; set; }

        //[DisplayName("ActiveLink")]
        public string Color_ActiveLink { get; set; }

        //[DisplayName("放送情報")]
        public string Color_CastInfo { get; set; }

        //[NonSerialized]
        public bool enable;

        public StyleSetting()
        {
            Color_form_fore = "black";

            Color_form_back = System.Drawing.SystemColors.Control.Name;

            Color_toolmenuContTop_back = System.Drawing.SystemColors.Control.Name;

            Color_toolmenuContBot_back = System.Drawing.SystemColors.Control.Name;

            Color_toolmenuContPanel_back = System.Drawing.SystemColors.Control.Name;

            Color_toolmenu_back = System.Drawing.SystemColors.Control.Name;

            Color_toolmenu_fore = "black";

            Color_statusStrip_back = System.Drawing.SystemColors.Control.Name;

            Color_statusStrip_fore = "black";

            Color_menu_back = System.Drawing.SystemColors.Control.Name;

            Color_menu_fore = "black";

            Color_info_back = System.Drawing.SystemColors.Control.Name;

            Color_infolabel_fore = "black";

            Color_info_fore = "black";

            Color_chat_back = System.Drawing.SystemColors.Control.Name;

            Color_chat_fore = "black";

            Color_chattext_back = System.Drawing.SystemColors.Window.Name;

            Color_Faital = "red";

            Color_Status = "black";

            Color_Linked = "black";

            Color_ActiveLink = "red";

            Color_CastInfo = "lightgreen";

        }
    }

読み込み
StyleSetting styles;
ってどっかで定義されている前提です。
                if (System.IO.File.Exists(path))
                {
                    System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open,System.IO.FileAccess.Read);

                    try
                    {
                        //XmlSerializerオブジェクトの作成
                        XmlSerializer serializer = new XmlSerializer(typeof(StyleSetting));
                        //ファイルを開く
                        //XMLファイルから読み込み、逆シリアル化する
                        styles = (StyleSetting)serializer.Deserialize(fs);

                        styles.enable = true;
                    }
                    catch
                    {

                        fs.Close();
                    }
                    finally
                    {
                        //閉じる
                        fs.Close();
                    }

                }


書き出し
pathに保存先が書かれている前提です
            System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create);

            try
            {
                 XmlSerializer Serializer = new XmlSerializer(typeof(StyleSetting));

                //シリアル化し、XMLファイルに保存する
                Serializer.Serialize(fs, styles);
                //閉じる
                fs.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                fs.Close();
            }

かいてる構文はあとで調べていただくとして、手順としては超簡単だと思います。
アンコちゃん本体の設定ファイルは、バイナリのシリアライズなのでいろいろ制約が厳しくてちょっぴり失敗した感を感じています。
追記: 2012年 12月8日にリリースした version2.0.40.4 より、本体の設定ファイルを bin 形式から XML 形式に変更しました。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

※現在 メンバー のみがコメント投稿可能な設定になっています。

広告

Menu


外部ツール

はじめてのニコニコ生放送
その他の情報
【メニュー編集】

メンバーのみ編集できます

メンバー募集!
閉じる
XP向けのサポートは終了しています。
古いバージョンを続けてお使いになると、データの整合がとれなくなりバージョンアップできなくなる場合がありますので、なるべく最新をお使いください。