C# WinForms 入門シリーズ
WinForms の基本コントロールとよく使う機能を、学習の流れに沿ってまとめたシリーズです。
補足: class や List の腹落ちを先に固めたい場合は、クラス気づき学習シリーズ(コンソール中心・全6回)を、とくに 第6回(ListBox)の前 に読むとつながりやすいです。
補足(デザイナとコード): ツールボックスから置いただけで動く理由をコード側まで追いたい場合は、WinFormsの「ドラッグ&ドロップ」の正体シリーズ(InitializeComponent / Controls.Add)を参照してください。
補足(継承・OOP): Button のプロパティが多い理由を Control の継承からつかむ場合は、WinFormsで学ぶ「継承」入門シリーズ(is-a / has-a・foreach (Control c in ...) のイメージ)を参照してください。
- フォームとコントロール … 基本の画面構成
- Button イベント … クリックで処理を実行
- TextBox … テキスト入力
- Label … テキスト表示
- PictureBoxで画像を表示する方法まとめ … 画像表示
- WinFormsで作る電話帳アプリ(Listで管理する版) … 一覧表示・選択
- 基本の保存と読み込み / ダイアログで保存と開く … ファイル選択
- タイマーでカウントダウン / デジタル時計 … 一定時間ごとの処理
- WinFormsでサウンドを鳴らす最短ルートと実践レシピ … サウンド再生
- チェックボックスを使ってみよう / ラジオボタンを使ってみよう … 選択UI
- DateTimePickerを使ってみよう … 日付・時刻の選択
- ProgressBarを使ってみよう … 進捗表示
- NumericUpDownを使ってみよう … 数値入力
- ErrorProviderを使ってみよう … 入力エラーをアイコンで表示
- TabControlを使ってみよう … タブで画面切り替え
- ToolTipを使ってみよう … マウスオーバーでヒント表示
- TrackBarを使ってみよう … スライダーで値調整
- ContextMenuStripを使ってみよう … 右クリックメニュー
- StatusStripを使ってみよう … ステータスバー
- UserControlを使ってみよう … 複数コントロールを1つにまとめる
※このページはシリーズの目次です。記事未作成の項目は、公開後にリンクを追加してください。
はじめに
WinForms は、C# で Windows デスクトップアプリを作るための仕組みです。ボタンやテキストボックス、画像表示など、よく使う部品(コントロール)をドラッグ&ドロップで配置し、イベントにコードを書くだけでアプリが作れます。
このシリーズでは、よく使うコントロールと機能を順番に解説します。各記事は独立して読めますが、前から順に進めると理解が深まります。
シリーズ記事
第1回 フォームとコントロール
フォームとは・コントロールとは
フォームがアプリのウィンドウ、コントロールがボタンやテキストボックスなどの部品です。ドラッグ&ドロップで配置し、プロパティで見た目を変えます。
第2回 Button イベント
クリックで処理を実行
ボタンを押したときに処理を実行するには、Click イベントにコードを書きます。イベントハンドラの基本を学びます。
第3回 TextBox
テキスト入力
ユーザーが文字を入力するためのコントロールです。Text プロパティで入力内容を取得・設定できます。
第4回 Label
テキスト表示
ラベルは文字を表示するためのコントロールです。計算結果やメッセージの表示に使います。
第5回 PictureBox(画像表示)
画像を表示する
PictureBox は画像を表示するためのコントロールです。設計時に設定する方法、実行時に Image.FromFile で読み込む方法、OpenFileDialog でユーザーに選ばせる方法があります。
第6回 ListBox
一覧表示・選択
複数の項目を一覧表示し、ユーザーに選んでもらうコントロールです。Items.Add で追加、SelectedItem で選択内容を取得します。
- 事前学習(任意): クラス気づき学習シリーズ …
List/foreachのイメージをコンソールで固める - WinFormsで作る電話帳アプリ(Listで管理する版)
第7回 OpenFileDialog / SaveFileDialog
ファイル選択
「ファイルを開く」「名前を付けて保存」のダイアログを表示します。ユーザーが保存先や開くファイルを選べるようになります。
第8回 Timer
一定時間ごとの処理
一定間隔で処理を実行したいときに使います。カウントダウン、デジタル時計、ゲームループなどに応用できます。
第9回 SoundPlayer
サウンド再生
WAV 形式の音声を再生します。ボタンクリックで効果音を鳴らすなど、簡単な音声再生に使えます。
第10回 チェックボックス・ラジオボタン
選択UI
複数選択(チェックボックス)と1つだけ選択(ラジオボタン)の違いを学びます。条件検索や設定画面でよく使います。
第11回 DateTimePicker
日付・時刻の選択
ユーザーに日付や時刻を選んでもらうためのコントロールです。カレンダー形式で日付を選べます。予定管理、家計簿、勤怠メモなどで使います。
第12回 ProgressBar
進捗表示
処理の進み具合を視覚的に表示するコントロールです。ファイルの読み込み、ダウンロード、長時間処理の進捗表示などに使います。
第13回 NumericUpDown
数値入力(スピナー)
数量や金額など、数値だけを入力させたいときに使います。上下ボタンで増減でき、Minimum / Maximum で範囲を制限できます。
第14回 ErrorProvider
入力エラーをアイコンで表示
入力検証でエラーがある項目の横に赤いアイコンを表示します。SetError でエラー表示、空文字でクリア。Label にエラーを書くより、どの項目がエラーか分かりやすくなります。数値検証の延長として、NumericUpDown や TextBox と組み合わせて使います。
第15回 TabControl
タブで画面を切り替える
複数の画面を1つのフォームにまとめたいときに使います。TabPage を追加し、各タブの中にコントロールを配置します。設定画面やマルチページフォームでよく使います。
第16回 ToolTip
マウスオーバーでヒントを表示
コントロールにマウスを乗せたときだけ説明を表示します。画面をすっきり保ちつつ、必要なときにヘルプを出せます。SetToolTip で各コントロールにヒントを設定します。
第17回 TrackBar
スライダーで値を調整する
スライダーをドラッグして値を変更するコントロールです。Minimum / Maximum で範囲を制限し、ValueChanged で値の変化に応じた処理ができます。音量や明るさの調整に適しています。
第18回 ContextMenuStrip
右クリックでメニューを表示
コントロールを右クリックしたときにメニューを表示します。ContextMenuStrip プロパティで関連付けると、ListBox や TextBox などで右クリックメニューが使えます。削除・コピー・貼り付けなど、一覧操作でよく使います。
第19回 StatusStrip
ステータスバーで状態を表示
フォーム下部に固定で状態を表示します。ToolStripStatusLabel を追加し、Text プロパティで「準備完了」「処理中」「完了」などのメッセージを表示できます。アプリの状態をユーザーに伝えるのに適しています。
第20回 UserControl
複数コントロールを1つにまとめる
Label、TextBox、Button などを組み合わせて、再利用可能な部品を作ります。プロパティの公開とイベント転送の基本を学び、チーム開発や実務アプリでの部品化の土台にします。
次のステップ
基本を押さえたら、次のシリーズに進めます。
| シリーズ | 内容 |
|---|---|
| WinFormsで学ぶ「継承」入門 | Button と Control・is-a / has-a・まとめて扱う |
| WinFormsの「ドラッグ&ドロップ」の正体 | デザイナが生成するコード(new・Controls.Add など) |
| WinFormsで実務アプリを作ろう | レジ、電話帳、家計簿などデータ管理系 |
| WinFormsでゲームを作ろう | ミニゲーム、タイマー、キー入力など |
| WinFormsでRPG入門(Unityへ繋がる設計) | クラス・状態・イベントを RPG で固め、Unity との対応を意識する |
まとめ
WinForms の基本は、コントロールの配置とイベントへのコード記述です。Button、TextBox、PictureBox、ListBox、DateTimePicker、ProgressBar、NumericUpDown、TabControl、ToolTip、TrackBar、ContextMenuStrip、StatusStrip、ErrorProvider、UserControl など、よく使うコントロールを1つずつ押さえていけば、実用的なアプリが作れるようになります。このシリーズが、WinForms を学ぶきっかけになれば幸いです。