XML に保存

Editor の設定情報を XML に保存します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. 今回は Editor の設定情報を XML に保存します。
    XML をプログラムする前に Form_Load と Form_Closing を設定します。
    Form のデザインを表示して稲妻アイコン(イベント)をクリックします。
    Load に Form_Load とタイプすると、Load のイベントハンドラが作成されます。
    FormClosing に Form_Closing とタイプすると、Closing のイベントハンドラが作成されます。
    Form_Load は、フォームが初めて表示される直前に発生するイベントで、アプリケーションの初期化を行います。
    Form_Closing は、フォームを閉じようとするときに発生するイベントで、保存の確認などを行います。
    アプリケーションの終了は this.Close(); でフォームのクローズを呼び出します。
  2. XML の Load と Save は Form_Load と Form_Closing で実行する方法がお勧めです。
    今回は RichTextBox に設定するフォント情報を保存します。
    Text Editor では、表示カラムを揃えることも重要です。
    プロポーショナルフォント(英: Proportional Font)とは、文字毎に文字幅が異なるフォントのことで、日本語では可変幅フォントとも呼ばれます。
    Text Editor では "MS 明朝" のように、Proportional Font 以外(P が付かないもの)が適しています。
        Font    m_font;
    
        m_font = new Font("MS 明朝", 12);
    
  3. m_flag は TEXT DATA が更新されたことを記録するフラグです。
    テキストの修正/ファイルの入出力など、適切な場所でセット, リセットして下さい。
    XML_File が保存するファイルのパスと名前です。
    TEXT 形式のファイルなので、Editor で表示してみて下さい。
    XML にロード(セーブ)する情報は、構造体(Class)で定義します。
    上の例では name が "MS 明朝" に、point が 12 に対応します。
    XML Save&Load  XML に保存 を参照して下さい。
        bool    m_flag;                 // Text 更新フラグ
        Font    m_font;                 // フォントの定義
        string  XML_File = @"C:\tmp\edit.xml";
    
        public class XmlClass
        {   public string      name;    // Font Name
            public float       point;   // Font Size
        }
    
  4. XML のフォント情報をロードして、Font を設定します。
    m_font = new Font("MS 明朝", 12); は XML が見つからないときの既定の Font です。
    また Form(ウインドウ)のサイズを実行環境に合わせてここで設定します。
        private void Form_Load(object sender, EventArgs e)
        {
            Width = 1000;
            Height = 480;
            if (File.Exists(XML_File))  //ファイルの有無をチェック
            {   System.Xml.Serialization.XmlSerializer serializer =
                    new System.Xml.Serialization.XmlSerializer(typeof(XmlClass));
                System.IO.FileStream fs =
                    new System.IO.FileStream(XML_File, System.IO.FileMode.Open);
                XmlClass obj = (XmlClass)serializer.Deserialize(fs);
                fs.Close();
                int point = (int)obj.point;
                m_font = new Font(obj.name, point);
            }
            else    m_font = new Font("MS 明朝", 12);
            richTextBox1.Font = m_font;
            richTextBox1.LanguageOption = RichTextBoxLanguageOptions.UIFonts;
        }
    
  5. Font 情報を XML に保存します。
    Form_Closing() では、プログラムを閉じる前にファイルの保存確認を行います。
    Cancel_Check() は ファイル入出力 を参照して下さい。
    ファイルの保存確認に続いて、XML に保存します。
        private void Form_Closing(object sender, FormClosingEventArgs e)
        {
            if (Cancel_Check())
            {
                e.Cancel = true;
                return;
            } 
            XmlClass obj = new XmlClass();
            obj.name = m_font.Name;
            obj.point = m_font.SizeInPoints;
            System.Xml.Serialization.XmlSerializer serializer =
                new System.Xml.Serialization.XmlSerializer(typeof(XmlClass));
            System.IO.FileStream fs =
                new System.IO.FileStream(XML_File, System.IO.FileMode.Create);
            serializer.Serialize(fs, obj);
        }
    
  6. 空のプロジェクトから構築したときは、コンパイルすると次のエラーが表示されました。
    【Windows アプリケーション】を使うと問題なくコンパイル出来ると思います。
    エラー 1   型または名前空間名 'Xml' は名前空間 'System' に存在しません。
    アセンブリ参照が不足しています。
    
    このエラーに対する対処の方法です。
    ①using を設定して下さい。
    using System.Xml.Serialization;     // System.Xml.dll を追加
    
    ②System.xaml.dll を追加して下さい。
    1. ソリューション・エクスプローラーで「参照設定」を右クリックする。
    2. 「参照の追加」を選択する。
    3. System.xaml (または System.xaml.dll) をチェックして追加する。
  7. Font の設定はメニュー操作で行います。
    Font を設定する SetFont() メソッドです。
        private void SetFont(object sender, EventArgs e)
        {
            FontDialog fontDialog1 = new FontDialog();
            fontDialog1.Font = m_font;
            fontDialog1.MaxSize = 32;
            fontDialog1.MinSize = 9;
            fontDialog1.FontMustExist = true;
            fontDialog1.FixedPitchOnly = true;
            if (fontDialog1.ShowDialog() == DialogResult.OK)
            {
                m_font = fontDialog1.Font;
                this.richTextBox1.Font = m_font;
            }
            fontDialog1.Dispose();
        }
    

[Next Chapter ↓] 検索機能
[Previous Chapter ↑] Contex Menu

超初心者のプログラム入門(C# Frame Work)