VB.NETで自分だけのコンポーネントを作る!


mainVisual

こんにちは!
脱新人プログラマー(入社して早2年目となったので ※すでに三十路)のわっくんです。

最近、若手プログラマーから「既存のコンポーネントって、かゆいところに少し手が届かないんですよね~」と言われました。いやいや、それは誤解で、VB.NETのコンポーネントは非常に優秀だと思います。何が優秀かと言うと、「(VB.NETの)既存のコンポーネントをカスタマイズ出来るから」です。
個人的には、VB.NETというのは、既存のコンポーネント、例えばテキストボックス等をプログラマーが自由にカスタマイズ出来る様に、「敢えてそれほど機能を持たせてない」という認識です。自由にカスタマイズ出来れば、自分オリジナルの機能も実装することが出来るので、世界に一つだけのコンポーネント♪が作れちゃいます!オンリーワンです!(古い)

※多種多様な機能を持ち合わせているコンポーネントがあれば、それは非常に便利かもしれませんが、プログラミングする側としては、目的とした業務・機能・ロジックに合わせて自由にカスタマイズ出来た方が便利です。推測ですが、Microsoftさんとしても、「必要なものだけ用意したので、プログラミングの現場に合わせてご自由に使って下さい!」というスタンスなのだと思います。


「ほう、じゃあどうやってカスタマイズするの?」と言う声が聞こえて来ますね。というわけで、今回は既存のコンポーネントをカスタマイズする方法を紹介します!
1.自作コンポーネントを作る前に
早速作ってみましょう!の前に、少しだけ解説を。今回紹介する内容は、オブジェクト指向の中でも「継承」という概念です。その中の「オーバーライド」という技術を使います。
端的に言うと、「継承」は、「クラス定義の共通部分を別クラスにまとめる仕組み」です。「オーバーライド」は、「メソッドをサブクラスで定義しなおして上書きする」ということです。
正直、何のことかさっぱりわかりませんね。。。もう少し具体的に説明すると、「継承」はあるクラス定義を別のクラスとして再定義することです。

2.テキストボックスをカスタマイズしてみる
では実際に既存のコンポーネントを継承元としてカスタマイズしてみましょう。
準備ですが、フォームファイルとクラスファイルを用意します。命名で迷う人は、例として、以下の画像の様に作ってみて下さい。
blog1
それではレッツゴーです!

2-1.カスタマイズクラスを作る
まずはクラスの中身を記述していきます。今回はテキストボックスをカスタマイズするので、テキストボックスを継承するには以下の様に記述します。
Imports System.Windows.Forms
Public Class NewTextBox
    Inherits TextBox
End Class
えっ!?これだけ!?と思う方がいると思いますが、継承自体はこれで出来ます。「Inherits(=日本語で”継承”の意味)」を記述して、「TextBox」って書いてるだけじゃん!そうなんです。
記述の内容は、「新しく作成したNewTextBoxを、既存コンポーネントのTextBoxから継承しますよ」という意味です。
でも、これだけではTextBoxとまったく同じことしかできないので、メソッドのオーバーライドが必要です。

2-2.メソッドをオーバーライドする
ようやく今回のメインディッシュです。継承元クラスにある既存のメソッドをオーバーライドして、自分だけのメソッドにしてしましょう!私はこんな感じにしてみました。
Imports System.ComponentModel
Imports System.Windows.Forms

Public Class NewTextBox
    Inherits TextBox

    Private Sub NewTextBox_Validating(sender As Object, e As CancelEventArgs) Handles Me.Validating
        If Me.Text = "" Then
            MessageBox.Show("何か書いて!")
        End If
    End Sub
End Class
Validatingイベントの中に自分で記載してみました。機能としては、テキストボックスからフォーカスを外そうとするときに、入力チェックのイベントが起こり、テキストボックスの中身が空っぽであれば、メッセージを表示するというだけの簡単なものです。

2-3.カスタマイズしたテキストボックスをフォームに搭載してみる
では、ここまで出来たら、フォームファイルのデザイナーを開いてみましょう。なんと!!!!ツールボックスに自作したテキストボックスが出来てきます。
blog2
これをフォームに貼り付けます。フォーカスが外したいので、ボタンもこしらえておきます。
blog3
さあ動かしてみましょう。うまく出来ていれば、テキストボックスがブランクの状態でフォーカスを外そうとしたらメッセージが出てくるはずです。ドキドキ。
blog4
まだフォーカスが当たっているので、このままボタンを押してみましょう。
blog5
おっ!ちゃんとメッセージが出てきましたね!これでOKです。

まとめ

・既存コンポーネントを継承してカスタマイズしたいときは、Inheritsを使用する。
・継承元クラスのメソッドをオーバーライドすれば、自作メソッドが作れる。

今回は簡単なコンポーネントのカスタマイズでしたが、機会があれば、もう少し便利な方法を紹介したいと思います。

株式会社ライズウィル

株式会社ライズウィル

〒110-0016
東京都台東区台東1-27-11 やわらぎビル2F
TEL : 03-4590-3200
FAX : 03-4590-3201
E-Mail : info@risewill.co.jp
URL : https://www.risewill.co.jp

海上コンテナ輸送管理システム「海コン魂!」
海コン魂!
面接予約・スタッフ管理システム「WebWORKS.」
WebWORKS.