佐々木屋

技術的なことから趣味まで色々書きます

継承(フォームの継承)

前回はクラスの継承について説明しましたが、フォームもクラスなわけなので継承可能です。ただ、コードを継承する場合と違い、コントロールを継承する場合は少しひと手間必要です。

継承するフォームの宣言

継承するフォームをコード上に宣言しますが、C#VB.NETで若干違います。

C#の場合

C#の場合はクラスの継承と同様で、派生クラス名に続いて「:」で区切って継承する基底フォームクラスを宣言します。

public partial class Form2 : Form1 {


VB.NETの場合

VB.NETの場合は少しややこしいです。何故VB.NETC#でクラスの継承はほぼ一緒なのにフォームクラスになると違うのかは謎ですが・・・(VB.NETではオブジェクト指向するなと言われているように聞こえますね)。

まず、ソリューションエクスプローラーで「すべてのファイルを表示」を押下します。
f:id:sasaki816:20190217202553j:plain
次に派生するフォームを展開し、Designer.vbを開きます。
f:id:sasaki816:20190217230605j:plain
あとはクラスの継承と同様で、Inheritsステートメントを宣言します。この時、すでにSystem.Windows.Forms.Formクラスを継承していますので、この部分を変更します。

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
    Inherits Form2 'ここを変更


コントロールの継承

この状態でコード自体は継承されてはいますが、コントロール自体はロックされたような状態になり、コントロールのプロパティは変更出来ません。
f:id:sasaki816:20190217230921j:plain
このようにコントロールに鍵マークが付きます。

これを解消するには、コントロールのModifiersプロパティを変更します。派生クラスまで操作を含めればよいので、アクセス修飾子はprotectedを選択します。最後にソリューションのビルドを実行すれば反映します。
f:id:sasaki816:20190217231013j:plain
鍵のマークがなくなり、派生クラスでも操作可能となります。