【入門編】カスタムコントロールの自社開発:UserControlを継承して頻繁に使う業務入力パーツ(和暦対応日付ボックスなど)を部品化する – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク

【VB.NET極意】「コピペ地獄」からの卒業。最強のカスタム日付入力コントロールを作ろう

こんにちは。現場の最前線でコードと格闘する皆さんに、今日は「VB.NETで大規模開発を生き抜くための極意」を伝授します。

皆さんは、新しい画面を作るたびに「日付入力欄」を配置し、そこに「和暦変換のロジック」や「不正な日付のバリデーション」を毎回コピペしていませんか?
もし一つでも修正が入ったら、全画面のコードを書き直す……そんな悪夢のような運用からは、今日で卒業しましょう。

今回は、`UserControl`を継承し、「自分だけの魔法の入力パーツ」を作る方法を解説します。

1. なぜ「カスタムコントロール」なのか?

プログラミング初心者が陥りやすい最大の罠は、「同じコードをあちこちに書くこと」です。
業務システムにおいて、日付入力は「聖域」です。以下の機能が求められます。

  • バリデーション: 2月30日などが入力されたら即座に警告する。
  • 書式統一: 「2023/10/01」と「R5.10.1」の相互変換。
  • イベント制御: フォーカスが外れた瞬間に自動整形する。

これらを一つの部品に詰め込み、ツールボックスからドラッグ&ドロップで配置できるようにする。これが「真のエンジニアの仕事」です。

2. 実践:和暦対応日付コントロールの設計

まずは、Visual Studioで「ユーザーコントロール (Windows Forms)」を新規作成してください。名前は `DateInputBox` としましょう。

以下のコードは、単なるテキストボックスではなく、「日付としての正当性を自ら担保する」賢い部品です。

Imports System.ComponentModel

Public Class DateInputBox
Inherits TextBox

‘ フォーカスが外れた時にバリデーションを実行する
Protected Overrides Sub OnLostFocus(e As EventArgs)
MyBase.OnLostFocus(e)

Dim inputDate As Date
‘ 入力値が正しい日付かチェック
If Not Date.TryParse(Me.Text, inputDate) Then
MessageBox.Show(“正しい日付形式で入力してください。”, “入力エラー”, MessageBoxButtons.OK, MessageBoxIcon.Warning)
Me.Focus() ‘ 間違っていればフォーカスを戻す
Else
‘ 正しければ和暦変換などの処理をここに追加可能
Me.Text = inputDate.ToString(“yyyy/MM/dd”)
End If
End Sub

‘ プロパティを追加:外部から簡単に日付を取得できるようにする

Public ReadOnly Property SelectedDate As Date?
Get
Dim d As Date
If Date.TryParse(Me.Text, d) Then Return d
Return Nothing
End Get
End Property
End Class

このコードの「知的な」ポイント

1. `Inherits TextBox`: 既存の`TextBox`の全機能を継承しつつ、必要な部分だけを「上書き(オーバーライド)」しています。これがオブジェクト指向の旨味です。
2. `OnLostFocus`の活用: イベントが発生した瞬間に割り込むことで、メインの画面側のコードを一切汚さずに「自動チェック」を実現しています。
3. `Category`属性: これを付けることで、Visual Studioのプロパティウィンドウに独自項目として表示されます。まるで純正部品のような使い勝手になります。

3. 陥りやすい「落とし穴」と解決策

初めてカスタムコントロールを作ると、必ず以下の壁にぶつかります。

  • 「ツールボックスに表示されない!」

→ 解決策:ビルド(Ctrl + Shift + B)を忘れていませんか? プロジェクトを一度ビルドしないと、Visual Studioは新しい部品を認識しません。

  • 「デザイン画面で動かそうとするとエラーが出る」

→ 解決策:コンストラクタ内で複雑な計算をしないこと。デザイン画面はプログラムを実行していなくてもコードを動かします。初期化は `OnLoad` イベントで行うのが鉄則です。

4. さあ、現場に投入しよう

この部品を作ったら、あとは簡単です。ビルドした後にツールボックスを見ると、一番上に `DateInputBox` が表示されているはずです。それをフォームにドラッグ&ドロップしてください。

これだけで、あなたの作る全ての画面で「日付バリデーション済み」の入力欄が完成します。

最後に先輩からのアドバイスです。
「綺麗なコード」とは、行数が少ないコードではありません。「修正が必要になったとき、たった一箇所を直せば全てに反映されるコード」のことです。

今日作ったこのコントロールは、あなたの開発スピードを3倍、いや10倍にしてくれるはずです。まずは一つ、自分の手で「部品」を産み出してみてください。そこから見える景色は、確実に変わりますよ。


何か詰まったら、いつでも聞いてください。コードは裏切りません。一緒に最高の実装を目指しましょう!

タイトルとURLをコピーしました