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

こんにちは!
脱新人プログラマー(入社して早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を使用する。
・継承元クラスのメソッドをオーバーライドすれば、自作メソッドが作れる。

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

DXO株式会社

〒103-0014
東京都中央区日本橋蛎殻町2-13-6
EDGE水天宮8F
E-Mail : contact-info@dxo.co.jp
URL : https://dxo.co.jp