日々の出来事を手軽に記録できる「日記帳アプリ」。紙に書くのも味がありますが、パソコンで記録することで検索や管理がしやすくなります。今回は、C#とWindows Formsを使って、GUIで動作する日記帳アプリの作成方法を紹介します。
本記事では、記事の作成、編集、削除、検索といった基本機能を備えたアプリを、実際の画面設計とコード例を交えて丁寧に解説します。C#でデスクトップアプリを作ってみたい方や、簡単なプロジェクトに挑戦したい方にぴったりの内容です。
開発環境の準備
今回のアプリはWindows Forms(WinForms)を使って作成します。以下の環境を用意してください。
- Visual Studio 2022以上(Community版でOK)
- .NET 6 または .NET Framework 4.8
新規プロジェクトを作成するときは、「Windows フォーム アプリ」を選択しましょう。C#言語を選び、プロジェクト名は「DiaryApp」など任意の名前にします。
データの保存方法について
簡単な日記帳アプリであれば、SQLiteを使うのが便利です。以下のような構成でデータベースを設計します。
テーブル名:DiaryEntries
カラム名 | 型 | 説明 |
---|---|---|
Id | INTEGER | 主キー |
Date | TEXT | 投稿日時(yyyy-MM-dd) |
Title | TEXT | 記事タイトル |
Content | TEXT | 記事本文 |
SQLiteを使うには「System.Data.SQLite」パッケージをNuGetからインストールしてください。
Install-Package System.Data.SQLite
トップ画面のデザインと機能
トップ画面は、日付順に記事タイトルを一覧表示する画面です。ListViewコントロールを使って以下のように構成します。
- ListView(記事一覧)
- 表示形式:Details
- カラム:日付・タイトル
- ボタン
- 新規作成
- 編集
- 削除
- 検索
記事タイトルをダブルクリックすると、詳細画面が表示されるようにイベントを設定します。
private void listView1_DoubleClick(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
var id = listView1.SelectedItems[0].Tag.ToString();
ShowDetailForm(id);
}
}
記事の作成機能
記事を新しく作成するには、別ウィンドウ(Form)を開いて、タイトルと内容を入力できるようにします。
// 保存ボタンのクリックイベント
private void btnSave_Click(object sender, EventArgs e)
{
using (var conn = new SQLiteConnection("Data Source=diary.db"))
{
conn.Open();
string sql = "INSERT INTO DiaryEntries (Date, Title, Content) VALUES (@Date, @Title, @Content)";
using (var cmd = new SQLiteCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@Date", DateTime.Now.ToString("yyyy-MM-dd"));
cmd.Parameters.AddWithValue("@Title", txtTitle.Text);
cmd.Parameters.AddWithValue("@Content", txtContent.Text);
cmd.ExecuteNonQuery();
}
}
this.Close();
}
保存後は、メイン画面に戻って一覧を再読み込みしましょう。
記事の編集機能
編集は、新規作成とほぼ同じ画面を使い、既存データをフォームに表示したうえで、UPDATE文を発行します。
string sql = "UPDATE DiaryEntries SET Title = @Title, Content = @Content WHERE Id = @Id";
選択された記事のIdを保持し、それを基に編集対象を特定します。
記事の削除機能
削除も非常にシンプルです。選択中の記事Idを取得して、DELETE文を発行します。
string sql = "DELETE FROM DiaryEntries WHERE Id = @Id";
削除前には、確認ダイアログを出すのが親切です。
DialogResult result = MessageBox.Show("本当に削除しますか?", "確認", MessageBoxButtons.YesNo);
記事の検索機能
検索はタイトルまたは本文に特定の文字列が含まれているかを調べる機能です。フォームに検索ボックスを設置し、検索キーワードを取得してSQLのWHERE句に組み込みます。
string keyword = txtSearch.Text;
string sql = "SELECT * FROM DiaryEntries WHERE Title LIKE @keyword OR Content LIKE @keyword";
csharpコピーする編集するcmd.Parameters.AddWithValue("@keyword", "%" + keyword + "%");
検索結果をListViewに表示し直します。
データベースの初期化コード
最初にアプリを起動した時点で、データベースファイルが存在しない場合には自動的に作成するコードを追加しておくと便利です。
private void InitializeDatabase()
{
if (!File.Exists("diary.db"))
{
SQLiteConnection.CreateFile("diary.db");
using (var conn = new SQLiteConnection("Data Source=diary.db"))
{
conn.Open();
string sql = @"
CREATE TABLE DiaryEntries (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Date TEXT,
Title TEXT,
Content TEXT
);";
using (var cmd = new SQLiteCommand(sql, conn))
{
cmd.ExecuteNonQuery();
}
}
}
}
この関数をアプリ起動時に呼び出しておきましょう。
アプリの仕上げとユーザビリティ向上の工夫
- 日付順の並び替え:SQLで
ORDER BY Date DESC
を付けて常に最新の記事を上に表示します。 - 入力バリデーション:タイトルや内容が空のまま保存できないようにチェックを追加しましょう。
- デザインの改善:フォントサイズ、ボタン配置、テーマカラーなどを調整するとより快適なUIになります。
おわりに
C#とWindows Formsを使えば、比較的簡単に実用的な日記帳アプリを作ることができます。データベースと連携することで、検索や管理もスムーズになり、日々の記録がさらに楽しくなります。
今回紹介したのは基本的な構成ですが、将来的には画像添付機能やパスワード保護、PDFエクスポートなどを追加することで、さらに使いやすいアプリへと進化させることも可能です。
ぜひ本記事を参考に、自分だけのオリジナル日記アプリを作ってみてください!