フォームと継承
カスタムコントロールの作成は難しくはありません。普段はフォームにコードを書いてプログラムを作っていると思いますが、フォームもカスタムコントロールに似ています。
Visual Studioでプロジェクトを作ると自動的に一つ目のフォームが作成されますね。その行頭は以下のようになっています。
public partial class Form1 : Form
Public Class Form1
VB.NETの場合、正確に書くと以下のようになります。
Public Class Form1 : Inherits Form
※筆者はVB.NETは詳しくないので、なぜInheritsが省略できるのかわかりません。誰か教えてください。
つまり、普段使っているフォームは、Formというクラスを継承していることになります。継承すると、Formクラスに用意されている機能を使いながら、必要な部分は継承されたForm1で置き換えることができます。では、ここでその例を見てみましょう。
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.DrawString("Hello World!", Font, Brushes.Black, 100, 100); }
Protected Overrides Sub OnPaint(e As PaintEventArgs) MyBase.OnPaint(e) e.Graphics.DrawString("Hello World!", Font, Brushes.Black, 100, 100) End Sub
Formクラス(正確にはそのもっと継承元であるControlクラス)のOnPaintメソッドをオーバーライドして、フォーム上に文字列を出力しています。オーバーライドとは、継承元で用意されている機能を拡張、もしくは置き換えることです。
カスタムコントロールもこれと同じようにして作ります。継承元がControlクラスやUserControlクラスに変わるだけです。あるいは、既存のコントロールの機能を使ってそれを改良したい場合は、たとえばLabelコントロールから継承することもできます。
なお、フォームでは通常、上のような処理をする場合、Paintイベントで行うほうが普通ですが、カスタムコントロールの場合は基本的にメソッドをオーバーライドして作ります。イベントは、カスタムコントロールを利用する側(フォームなど)が使います。ただし、オーバーライドする適切なメソッドがない場合はイベントを使用することもあります。
2013年12月30日
作成環境の準備 »