今回はデータをファイルとして保存できるようにします。保存するのはカテゴリの名前、タスクの名前、開始日、終了日、表示色、チャートに表示する日付の開始日と終了日です。そこれからカテゴリとタスクの順番も同じように保存します。
そのためにCategoryUserControlとTaskUserControlにプロパティを追加します。プロパティをセットすることで表示がおこなわれるとともに設定を取得できるようにします。
1 2 3 4 5 6 7 8 |
public partial class CategoryUserControl : UserControl { public string CategoryName { set { textBox1.Text = value; } get { return textBox1.Text; } } } |
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 37 38 39 40 41 42 43 44 |
public partial class TaskUserControl : UserControl { public string TaskName { set { TextBoxTaskName.Text = value; } get { return TextBoxTaskName.Text; } } public string ManagerName { set { TextBoxManagerName.Text = value; } get { return TextBoxManagerName.Text; } } public long TaskStartDayTicks { set { TaskStartDay = new DateTime(value); } get { return TaskStartDay.Ticks; } } public long TaskEndDayTicks { set { TaskEndDay = new DateTime(value); } get { return TaskEndDay.Ticks; } } public int TaskColorArgb { set { TaskColor = Color.FromArgb(value); } get { return TaskColor.ToArgb(); } } public static long BandStartDayTicks { set { BandStartDay = new DateTime(value); } get { return BandStartDay.Ticks; } } public static long BandEndDayTicks { set { BandEndDay = new DateTime(value); } get { return BandEndDay.Ticks; } } } |
次にこれをXMLファイルとして保存できるようにクラスを作成します。DocクラスとCategoryInfoクラスとTaskInfoクラスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class Doc { public List<CategoryInfo> CategoryInfos = new List<CategoryInfo>(); public long BandStartDayTicks = 0; public long BandEndDayTicks = 0; } public class CategoryInfo { public string CategoryName = ""; public List<TaskInfo> TaskInfos = new List<TaskInfo>(); } public class TaskInfo { public string TaskName = ""; public string ManagerName = ""; public long TaskStartDayTicks = 0; public long TaskEndDayTicks = 0; public int TaskColorArgb = 0; } |
あとはこれらを使って設定をデータとして取得してファイルに保存するだけです。
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 37 38 39 40 41 42 |
public partial class Form1 : Form { void SaveFile() { List<CategoryInfo> CategoryInfos = new List<CategoryInfo>(); foreach (CategoryUserControl categoryUserControl in CategoryUserControls) { CategoryInfo categoryInfo = new CategoryInfo(); categoryInfo.CategoryName = categoryUserControl.CategoryName; foreach (TaskUserControl taskUserControl in categoryUserControl.TaskUserControls) { TaskInfo taskInfo = new TaskInfo(); taskInfo.TaskName = taskUserControl.TaskName; taskInfo.ManagerName = taskUserControl.ManagerName; taskInfo.TaskStartDayTicks = taskUserControl.TaskStartDayTicks; taskInfo.TaskEndDayTicks = taskUserControl.TaskEndDayTicks; taskInfo.TaskColorArgb = taskUserControl.TaskColorArgb; categoryInfo.TaskInfos.Add(taskInfo); } CategoryInfos.Add(categoryInfo); } Doc doc = new Doc(); doc.CategoryInfos = CategoryInfos; doc.BandStartDayTicks = TaskUserControl.BandStartDayTicks; doc.BandEndDayTicks = TaskUserControl.BandEndDayTicks; SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "データファイル(*.dat)|*.dat"; if (dialog.ShowDialog() == DialogResult.OK) { string filePath = dialog.FileName; XmlSerializer serializer = new XmlSerializer(typeof(Doc)); StreamWriter sw = new StreamWriter(filePath); serializer.Serialize(sw, doc); sw.Close(); } dialog.Dispose(); } } |
ファイルとして保存することができたらファイルからデータを読みこむことができるようにします。
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
public partial class Form1 : Form { void OpenFile() { // ファイルからデータを読みこむ Doc doc = null; OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "データファイル(*.dat)|*.dat"; if (dialog.ShowDialog() == DialogResult.OK) { string filePath = dialog.FileName; XmlSerializer serializer = new XmlSerializer(typeof(Doc)); StreamReader sr = new StreamReader(filePath); doc = (Doc)serializer.Deserialize(sr); sr.Close(); } dialog.Dispose(); // 現在の状態をクリア CategoryUserControls.Clear(); PanelMain.Controls.Clear(); // データからコントロールを作成し、プロパティをセットする foreach (CategoryInfo categoryInfo in doc.CategoryInfos) { CategoryUserControl categoryUserControl = new CategoryUserControl(CategoryUserControls); CategoryUserControls.Add(categoryUserControl); PanelMain.Controls.Add(categoryUserControl); categoryUserControl.CategoryName = categoryInfo.CategoryName; foreach (TaskInfo taskInfo in categoryInfo.TaskInfos) { TaskUserControl taskUserControl = new TaskUserControl(categoryUserControl, categoryUserControl.TaskUserControls); categoryUserControl.TaskUserControls.Add(taskUserControl); categoryUserControl.Controls.Add(taskUserControl); taskUserControl.TaskName = taskInfo.TaskName; taskUserControl.ManagerName = taskInfo.ManagerName; taskUserControl.TaskStartDayTicks = taskInfo.TaskStartDayTicks; taskUserControl.TaskEndDayTicks = taskInfo.TaskEndDayTicks; taskUserControl.TaskColorArgb = taskInfo.TaskColorArgb; categoryUserControl.CategoryAdded += CategoryUserControl_CategoryAdded; ; categoryUserControl.TaskAdded += CategoryUserControl_TaskAdded; taskUserControl.TaskInserted += TaskUserControl_TaskInserted; } } TaskUserControl.BandStartDayTicks = doc.BandStartDayTicks; TaskUserControl.BandEndDayTicks = doc.BandEndDayTicks; ShowChart(); } } |