メニューをプログラム

Text Editor のメニューをプログラムします。

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

メニューをプログラム

  1. Text Editor の骨格が完成した所で、メニューをプログラムします。
    メニューの基本は ToolBox からメニューを貼り付ける を参照して下さい。
  2. using の追加とグローバル領域の定義です。
    txtfile, txtcode は TextFile の名前と文字コードです。
    font は TextBox のフォント情報です。
    XML_File は、この後で説明する Text Editor の設定を保存する XML ファイル名です。
    using System.IO;    // for File, StreamReader
    using System.Text;  // for Encoding
    
        public partial class Form1 : Form
        {
            string txtfile;         //ファイル名
            string txtcode= string.Empty;   //TEXTコード
            Font font;
            public string XML_File = @"C:\tmp\texteditor.xml";
            StreamReader  reader;
            StreamWriter  writer;
    
  3. Exit() メソッドにプログラムを終了するコードを追加します。
        private void Exit(object sender, EventArgs e)
        {
            this.Close();
        }
    
  4. HelpAbout() メソッドにバージョン情報を表示するコードを追加します。
        private void HelpAbout(object sender, EventArgs e)
        {
            MessageBox.Show("Text Editor by Maeda Minoru  Ver 1.0");
        }
    
  5. UniOpen() メソッドに Unicode のファイルを入力するコードを追加します。
    OpenFile() の引数に string.Empty を指定して、規定値で入力します。
    規定値に設定すると UTF-8 と Unicode のファイルを入力することが出来ます。
        private void UniOpen(object sender, EventArgs e)
        {
            OpenFile(string.Empty);
        }
    
  6. JisOpen() メソッドに MultiByte(ANSI) のファイルを入力するコードを追加します。
    OpenFile() の引数に "shift_jis" と指定すると Shift-JIS から内部コードへの変換が行われます。
    もし入力するファイルが Shift-JIS でなかったら文字コードが化けてしまいます。
        private void JisOpen(object sender, EventArgs e)
        {
            OpenFile("shift_jis");
        }
    
  7. OpenFile() メソッドで TEXT FILE を入力して TextBox に表示します。
    encode が string.Empty のときは、規定値で入力します。
    コード変換を規定値にすると、Unicode に加えて UTF-8 にも対応します。
    Visual Studio の C# ファイルは UTF-8 で保存されているようです。
    OpenFileDialog は Open File Dialog を参照して下さい。
    TEXT FILE の入力は TEXT File の入力 を参照して下さい。
        private void OpenFile(string encode)
        {
            txtcode = encode;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Title = "ファイルを選択してください";
            openFileDialog1.Filter = "テキスト ファイル|*.txt;*.log|すべてのファイル|*.*";
            openFileDialog1.RestoreDirectory = true;
            openFileDialog1.ShowReadOnly = true;
            openFileDialog1.ReadOnlyChecked = true;
    
            if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
            {
                txtfile = openFileDialog1.FileName;
                textBox1.Clear();
                if (txtcode == string.Empty)
                    reader = new StreamReader(txtfile);
                else
                    reader = new StreamReader(txtfile, Encoding.GetEncoding(txtcode));
                string A;
                while ((A = reader.ReadLine()) != null)
                {
                    textBox1.AppendText(A + "\n");
                }
                reader.Close();
            }
            openFileDialog1.Dispose();
        }
    
  8. UniSave() メソッドにファイルに保存するコードを追加します。
    string.Empty で保存すると、規定値(テスト段階では UTF-8)で保存されます。
    Unicode で保存するときは SaveFile("utf-16") として下さい。
        private void UniSave(object sender, EventArgs e)
        {
            SaveFile(string.Empty);
        }
    
  9. JisSave() メソッドに MultiByte でファイルに保存するコードを追加します。
        private void JisSave(object sender, EventArgs e)
        {
            SaveFile("shift_jis");
        }
    
  10. Save() メソッドに修正データを上書するコードを追加します。
    入力したファイル名は txtfile で、文字コードは txtcode です。
        private void Save(object sender, EventArgs e)
        {
            if (txtcode == string.Empty)
                writer = new StreamWriter(txtfile, false);
            else
                writer = new StreamWriter(txtfile, false, Encoding.GetEncoding(txtcode));
            for (int i = 0; i < textBox1.Lines.Length; i++)
            {
                writer.Write(textBox1.Lines[i] + "\r\n");
            }
            writer.Close();
        }
    
  11. SaveFile() メソッドで TextBox のテキストをファイルに保存します。
    コード変換を規定値にすると UTF-8 で保存されるようです。
    SaveFileDialog は Save File Dialog を参照して下さい。
    TEXT FILE の出力は TEXT File の出力 を参照して下さい。
        private void SaveFile(string encode)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Title = "保存するファイルを選択してください";
            saveFileDialog1.Filter = "テキスト ファイル|*.txt;*.log|すべてのファイル|*.*";
            saveFileDialog1.RestoreDirectory = true;
            if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)
            {
                if (encode == string.Empty)
                    writer = new StreamWriter(saveFileDialog1.FileName, false);
                else
                    writer = new StreamWriter(saveFileDialog1.FileName, false,
                                 Encoding.GetEncoding(encode));
                for (int i = 0; i < textBox1.Lines.Length; i++)
                {
                    writer.Write(textBox1.Lines[i] + "\r\n");
                }
                writer.Close();
            }
            saveFileDialog1.Dispose();
        }
    
  12. SetFont() メソッドに文字フォントを設定するコードを追加します。
    FontDialog は Font Dialog を参照して下さい。
        private void SetFont(object sender, EventArgs e)
        {
            FontDialog fontDialog1 = new FontDialog();
            fontDialog1.Font = font;
            fontDialog1.MaxSize = 32;
            fontDialog1.MinSize = 9;
            fontDialog1.FontMustExist = true;
            fontDialog1.FixedPitchOnly = true;
            if (fontDialog1.ShowDialog() == DialogResult.OK)
            {
                font = fontDialog1.Font;
                this.textBox1.Font = font;
            }
            fontDialog1.Dispose();
        }
    
  13. プログラムを実行して Text File を入力して下さい。
    文字コードが合わないと漢字が文字化けします。
    MultiByte や Unicode でファイルを保存することが出来るので試して下さい。
    フォントメニューから TextBox のフォントを設定出来るので試して下さい。
    Text Editor では「Copy/Cut/Paste」などの編集メニューが必須ですが、今回は TextBox に自動的に設定される ContextMenu に委ねます。
    Text Editor の編集メニューのメソッドは Rich Contex で説明しています。
    多少の違いはあるのですが、TextBox でも RichTextBox と同様の編集機能が使えます。

【NOTE】

一般的に改行コードは、復帰(\r)と改行(\n)の2文字で表します。
詳細は Program Guid を参照して下さい。
現在のパソコンのシステムでは、復帰を無くして改行(\n)だけを使っている場合があります。
このプログラムでも OpenFile() では \n だけを付加しています。
所が SaveFile() で \n だけを付加した場合、メモ帳で表示すると改行されずに、全テキストが1行になりました。
そこでファイルに保存する場合は、復帰(\r)と改行(\n)を付加しています。
シフトJIS では \r\n で保存するのが良いようです。

メモ帳(notepad.exe)でファイルを確認するときは、保存した文字コードに合わせてコード選択して下さい。
コードが一致しないと文字化けすることがあります。
ちなみに、このアプリの開発環境は Windows8.1 評価版 & Microsoft Visual Studio Professional 2013 Preview - 日本語 です。

[Next Chapter ↓] XML に保存
[Previous Chapter ↑] Text Editor の基礎

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