↓の記事の続きです。
wrongwrong163377.hatenablog.com
手順
手順は↓の「不要部を削除」~「修正完了」までに上げてあります。
github.com
引数の無いコンストラクタを用意する
コンポーネントをデザイナーで扱うには、引数の無いコンストラクタを用意する必要があります。
Public Class CompornentBase Public Sub New() ' この呼び出しはデザイナーで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後で初期化を追加します。 '別のフォームに設定するための準備 With Me .TopLevel = False .Visible = True End With End Sub End Class
デザイナーでコンポーネントを宣言する
デザイナーをコードから開き、以下のようにMyCompornentを宣言してControlsにAddします。
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Class Parent Inherits System.Windows.Forms.Form 'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。 <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub 'Windows フォーム デザイナーで必要です。 Private components As System.ComponentModel.IContainer 'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。 'Windows フォーム デザイナーを使用して変更できます。 'コード エディターを使って変更しないでください。 <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.SuspendLayout() ' 'Parent ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(800, 450) Me.Name = "Parent" Me.Text = "Parent" Me.ResumeLayout(False) Dim MyCompornent As New CompornentBase Me.Controls.Add(MyCompornent) End Sub End Class
ビルドする
この状態でビルドすると、デザイナーでコンポーネントが表示できます。
が、ここまでではまだ不完全です。
デザイナーで移動させる
この状態からデザイナーで移動を行います。
するとVisualStudioが自動でよしなにやってくれるので、コードが以下のように変化します。
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Class Parent Inherits System.Windows.Forms.Form 'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。 <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub 'Windows フォーム デザイナーで必要です。 Private components As System.ComponentModel.IContainer 'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。 'Windows フォーム デザイナーを使用して変更できます。 'コード エディターを使って変更しないでください。 <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.MyCompornent = New UseFormcompornentSample.CompornentBase() Me.SuspendLayout() ' 'MyCompornent ' Me.MyCompornent.BackColor = System.Drawing.Color.SpringGreen Me.MyCompornent.ClientSize = New System.Drawing.Size(200, 100) Me.MyCompornent.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None Me.MyCompornent.Location = New System.Drawing.Point(81, 73) Me.MyCompornent.Name = "MyCompornent" Me.MyCompornent.Text = "Form1" ' 'Parent ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(800, 450) Me.Controls.Add(Me.MyCompornent) Me.Name = "Parent" Me.Text = "Parent" Me.ResumeLayout(False) End Sub Friend WithEvents MyCompornent As CompornentBase End Class
手順は以上です。