脱新人プログラマー(入社して早2年目となったので ※すでに三十路)のわっくんです。
最近、若手プログラマーから「既存のコンポーネントって、かゆいところに少し手が届かないんですよね~」と言われました。いやいや、それは誤解で、VB.NETのコンポーネントは非常に優秀だと思います。何が優秀かと言うと、「(VB.NETの)既存のコンポーネントをカスタマイズ出来るから」です。
個人的には、VB.NETというのは、既存のコンポーネント、例えばテキストボックス等をプログラマーが自由にカスタマイズ出来る様に、「敢えてそれほど機能を持たせてない」という認識です。自由にカスタマイズ出来れば、自分オリジナルの機能も実装することが出来るので、世界に一つだけのコンポーネント♪が作れちゃいます!オンリーワンです!(古い)
※多種多様な機能を持ち合わせているコンポーネントがあれば、それは非常に便利かもしれませんが、プログラミングする側としては、目的とした業務・機能・ロジックに合わせて自由にカスタマイズ出来た方が便利です。推測ですが、Microsoftさんとしても、「必要なものだけ用意したので、プログラミングの現場に合わせてご自由に使って下さい!」というスタンスなのだと思います。
「ほう、じゃあどうやってカスタマイズするの?」と言う声が聞こえて来ますね。というわけで、今回は既存のコンポーネントをカスタマイズする方法を紹介します!1.自作コンポーネントを作る前に
早速作ってみましょう!の前に、少しだけ解説を。今回紹介する内容は、オブジェクト指向の中でも「継承」という概念です。その中の「オーバーライド」という技術を使います。端的に言うと、「継承」は、「クラス定義の共通部分を別クラスにまとめる仕組み」です。「オーバーライド」は、「メソッドをサブクラスで定義しなおして上書きする」ということです。
正直、何のことかさっぱりわかりませんね。。。もう少し具体的に説明すると、「継承」はあるクラス定義を別のクラスとして再定義することです。
2.テキストボックスをカスタマイズしてみる
では実際に既存のコンポーネントを継承元としてカスタマイズしてみましょう。準備ですが、フォームファイルとクラスファイルを用意します。命名で迷う人は、例として、以下の画像の様に作ってみて下さい。
それではレッツゴーです!
Imports System.Windows.Forms
Public Class NewTextBox
Inherits TextBox
End Class
えっ!?これだけ!?と思う方がいると思いますが、継承自体はこれで出来ます。「Inherits(=日本語で”継承”の意味)」を記述して、「TextBox」って書いてるだけじゃん!そうなんです。記述の内容は、「新しく作成したNewTextBoxを、既存コンポーネントのTextBoxから継承しますよ」という意味です。
でも、これだけではTextBoxとまったく同じことしかできないので、メソッドのオーバーライドが必要です。
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イベントの中に自分で記載してみました。機能としては、テキストボックスからフォーカスを外そうとするときに、入力チェックのイベントが起こり、テキストボックスの中身が空っぽであれば、メッセージを表示するというだけの簡単なものです。これをフォームに貼り付けます。フォーカスが外したいので、ボタンもこしらえておきます。
さあ動かしてみましょう。うまく出来ていれば、テキストボックスがブランクの状態でフォーカスを外そうとしたらメッセージが出てくるはずです。ドキドキ。
まだフォーカスが当たっているので、このままボタンを押してみましょう。
おっ!ちゃんとメッセージが出てきましたね!これでOKです。
まとめ
・既存コンポーネントを継承してカスタマイズしたいときは、Inheritsを使用する。・継承元クラスのメソッドをオーバーライドすれば、自作メソッドが作れる。
今回は簡単なコンポーネントのカスタマイズでしたが、機会があれば、もう少し便利な方法を紹介したいと思います。