ファイルを読み込むためには[読み出し]をクリックしてファイルを読み込む必要があります。起動した段階で自動的に登録されているファイルを読み込むような仕様にすると便利かもしれません。あと予定管理アプリなので一度起動されたらそのままタスクトレイに常駐させるようにします。
まず、起動した段階で自動的に登録されているファイルを読み込ませるためにはその情報を記録する必要があります。そこで[設定]ボタンを作ります。
そのときに表示される設定用のフォームがこれです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public partial class ConfigForm : Form { public ConfigForm() { InitializeComponent(); button1.DialogResult = DialogResult.OK; } public string filePath = ""; public bool isSavePath = false; private void ConfigForm_Load(object sender, EventArgs e) { textBox1.Text = filePath; isSavePath = checkBox1.Checked; } private void button1_Click(object sender, EventArgs e) { filePath = textBox1.Text; } } |
これを表示させるためのイベントハンドラがこれです。
設定の[起動と同時に以下のファイルを読み込む]にチェックがされていて、TextBoxに存在するファイルのパスが入力されている場合、そのファイルパスをフィールド変数にstartFilePathに保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public partial class Form1 : Form { string startFilePath = ""; bool isAutoLoad = false; private void buttonConfig_Click(object sender, EventArgs e) { ConfigForm configForm = new ConfigForm(); configForm.filePath = startFilePath; configForm.isAutoLoad = isAutoLoad; if(configForm.ShowDialog() != DialogResult.OK) return; string startFilePath0 = configForm.filePath; if(File.Exists(startFilePath0)) startFilePath = startFilePath0; isAutoLoad = configForm.isAutoLoad; } } |
フォームが閉じられたときにフィールド変数に保存されている文字列が存在するファイルのパスの場合、これをファイルとして保存します。そのときのファイルは実行ファイルと同じフォルダのなかにあるconfig.xmlという名前のファイルです。
1 2 3 4 5 |
public class Config { public string filePath = ""; public bool isAutoLoad = false; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public partial class Form1 : Form { private void Form1_FormClosed(object sender, FormClosedEventArgs e) { if(!File.Exists(startFilePath)) return; Config config = new Config(); config.filePath = startFilePath; config.isAutoLoad = isAutoLoad; string configPath = Application.StartupPath + "\\config.xml"; XmlSerializer xml = new XmlSerializer(typeof(Config)); StreamWriter sw = new StreamWriter(configPath); xml.Serialize(sw, config); sw.Close(); } } |
次回起動したとき、実行ファイルと同じフォルダにconfig.xmlがあればこれを開きます。そしてそのなかから登録されているファイルのパスを取得してこれを開きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
public partial class Form1 : Form { private void Form1_Load(object sender, EventArgs e) { string configPath = Application.StartupPath + "\\config.xml"; if(!File.Exists(configPath)) return; XmlSerializer xml = new XmlSerializer(typeof(Config)); using(StreamReader sr = new StreamReader(configPath)) { Config config = (Config)xml.Deserialize(sr); startFilePath = config.filePath; isAutoLoad = config.isAutoLoad; if(!config.isAutoLoad) return; if(!File.Exists(startFilePath)) { MessageBox.Show(String.Format("{0}が存在しません", config.filePath), "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } XmlSerializer xml2 = new XmlSerializer(typeof(Doc)); using(StreamReader sr = new StreamReader(startFilePath)) { Doc doc = (Doc)xml2.Deserialize(sr); datas = doc.datas; Categories = doc.Categories; UpdateListViewItems(); } } } |
次にタスクトレイ内に常駐させる方法ですが、NotifyIconを使います。
タスクトレイにアイコンを表示させます。そして普通に[×]をクリックしたときは終了せず、フォームが非表示になるだけ(本当に終了させたいときは[終了]ボタンをクリック)にします。また非表示になったフォームを再表示させるためにはアイコンをクリックすれば表示されるようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
public partial class Form1 : Form { bool isExit = false; public Form1() { InitializeComponent(); notifyIcon1.MouseClick += NotifyIcon1_MouseClick; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if(!isExit) { this.Visible = false; e.Cancel = true; return; } } private void buttonExit_Click(object sender, EventArgs e) { isExit = true; Application.Exit(); } private void NotifyIcon1_MouseClick(object sender, MouseEventArgs e) { Visible = true; } } |