C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10namespace MyHouseKeepingBook 11{ 12 public partial class Form1 : Form 13 { 14 public Form1() 15 { 16 InitializeComponent(); 17 } 18 private void buttonAdd_Click(object sender, EventArgs e) 19 { 20 AddData(); 21 } 22 private void 追加AToolStripMenuItem_Click(object sender, EventArgs e) 23 { 24 AddData(); 25 } 26 private void AddData() 27 { 28 ItemForm frmItem = new ItemForm(CategoryDataSet1); 29 DialogResult drRet = frmItem.ShowDialog(); 30 if (drRet == DialogResult.OK) 31 { 32 moneyDataSet.moneyDataTable.AddmoneyDataTableRow( 33 frmItem.monCalendar.SelectionRange.Start, 34 frmItem.cmbCategory.Text, 35 frmItem.txtItem.Text, 36 int.Parse(frmItem.mtxtMoney.Text), 37 frmItem.txtRemarks.Text); 38 } 39 } 40 private void Form1_Load(object sender, EventArgs e) 41 { 42 LoadData(); 43 categoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("給料", "入金"); 44 categoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("食費", "出金"); 45 categoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("雑費", "出金"); 46 categoryDataSet1.CategoryDataTable.AddCategoryDataTableRow("住居", "出金"); 47 } 48 private void buttonEnd_Click(object sender, EventArgs e) 49 { 50 this.Close(); 51 } 52 private void 終了XToolStripMenuItem_Click(object sender, EventArgs e) 53 { 54 this.Close(); 55 } 56 private void SaveData() 57 { 58 string path = "MoneyData.csv"; //出力ファイル名 59 string strData = ""; //一行分のデータ 60 System.IO.StreamWriter sw = new System.IO.StreamWriter( 61 path, 62 false, 63 System.Text.Encoding.Default); 64 foreach (MoneyDataSet.moneyDataTableRow drMoney 65 in moneyDataSet.moneyDataTable) 66 { 67 strData = drMoney.日付.ToShortDataString() + "," 68 + drMoney.分類 + "," 69 + drMoney.品目 + "," 70 + drMoney.金額.ToString() + "," 71 + drMoney.備考; 72 sw.WriteLine(strData); 73 } 74 sw.Close(); 75 } 76 private void 保存SToolStripMenuItem_Click(object sender, EditorArgs e) 77 { 78 SaveData(); 79 } 80 private void form1_FormClosing(object sender, FormClosingEditorArgs e) 81 { 82 SaveData(); 83 } 84 private void LoadData() 85 { 86 string path = "MoneyData.csv"; //入力ファイル名 87 string delimStr = ","; // 区切り文字 88 char[] delimiter = delimStr.ToCharArray(); // 区切り文字をまとめる 89 string[] strLine; // 分解後の文字の入れ物 90 string strLine; // 一行分のデータ 91 bool fileExists = System.IO.File.Exists(path); 92 if (fileExists) 93 { 94 System.IO.StreamReader sr = new System.IO.StreamReader( 95 path, 96 System.Text.Encoding.Default); 97 while (sr.Peek() >= 0) 98 { 99 strLine = sr.ReadLine(); 100 strData = strLine.Splite(delimiter); 101 moneyDataSet.moneyDataTable.AddmoneyDataTableRow( 102 DateTime.Parse(strData[0]), 103 strData[1], 104 strData[2], 105 int, Parse(strData[3]), 106 strData[4]; 107 } 108 sr.Close; 109 } 110 } 111 private void UpdateData() 112 { 113 int nowRow = dgv.CurrentRow, Index; 114 DateTime oldDate 115 = DateTime.Parse(dgv.Rows[nowRow].Cell[0].Value.ToString()); 116 string oldCategory = dgv.Rows[nowRow].Cell[1].Value.ToString(); 117 string oldItem = dgv.Rows[nowRow].Cell[2].Value.ToString(); 118 int oldMoney 119 = int.Parse(dgv.Rows[nowRow].Cells[3].Value.ToString()); 120 string oldRemarks = dgv.Rows[nowRow].Cells[4].Value.ToString(); 121 ItemForm frmItem = newItemForm(categoryDataSet1, 122 oldDate, 123 oldCategory, 124 oldItem, 125 oldMoney, 126 oldRemarks); 127 DialogResult draRet = frmItem.ShowDialog(); 128 if (draRet == DialogResult.OK) 129 { 130 dgv.Rows[nowRow].Cells[0].Value 131 = frmItem.monCalendar.SelectionRangr.Start; 132 dgv.Rows[nowRow].Cells[1].Value = frmItem.cmbCategory.Text; 133 dgv.Rows[nowRow].Cells[2].Value = frmItem.txtItem.Text; 134 dgv.Rows[nowRow].Cells[3].Value = int.Parse.(frmItem.mtxtMoney.Text); 135 dgv.Rows[nowRow].Cells[4].Value = frmItem.txtRemarks.Text; 136 } 137 } 138 private void buttonChange_Click(object sender, EditorArgs e) 139 { 140 UpdateData(); 141 } 142 private void 変更CToolStripMenuItem_Click(object sender, EditorArgs e) 143 { 144 UpdateData(); 145 } 146 private void DeleteData() 147 { 148 int nowRow = DataGridView.CurrentRow.Index; 149 DataGridView.Rows.RemoveAt(nowRow); // 現在行を削除 150 } 151 private void buttonDelete_Click(object sender, EditorArgs e) 152 { 153 DeleteData(); 154 } 155 private void buttonChange_Click(object sender, EditorArgs e) 156 { 157 DeleteData(); 158 } 159 } 160} 161```家計簿アプリの作成をVisual StudioのC#で行なっております。 162Month Calendar でCSVに既に登録されている日付を選択できなくし、既に登録されている日付を選択するとメッセージボックスが表示されるようにしたいです。 163説明が不自由かも知れませんが、ご教示いただければと存じます。
説明が不十分すぎます。
学習されているのであれば、これまで学習された知識を組み合わせて、ある程度どのように実装するのかの目処は立っているはずです。
まず自分がどのように実装をしようとしているのかを提示して、その中での不明点を挙げてください。
さもないと、これは質問ではなくただの丸投げにしかなりません。
起動時に CsvHelper で CSV を読み込んでオブジェクトのリストにし、そこから日付を取り出して HashSet を作ります。Monthly Caledar の選択イベントをハンドルして HashSet から選択された日付を探し、存在すればメッセージボックスを表示します。
説明が不自由かもしれませんが読み取ってください。
MonthCalendarには「選択していない状態」がなさそうで、
通常今日の日付が選択されていると思うのですが、今日が登録済みの場合次の日になるんでしょうか?(1か月先まで埋まっていても?^^;
範囲選択ができますが、登録日にかかったらどうなるのでしょう?
いっそElementHostでWPFのCalendarを埋め込んだほうが簡単かもしれません(×で選択不可になるBlackoutDatesがあります)