フォームの共通要素を基本フォームにまとめるには?

解決


HogeHoge  2008-03-14 11:44:02  No: 144518  IP: 192.*.*.*

下記URLにタイトルの記事の解説が載っています。
www.atmarkit.co.jp/fdotnet/dotnettips/324winbaseform/winbaseform.html

この記事を見よう見まねで基本Form(この記事で言えばBaseForm)、継承先
Form(この記事で言えばForm1、Form2)を作り、継承先Formのコードをそれ
ぞれ

##########Form1##########
Public Class Form1
    Inherits BaseForm
End Class
##########Form2##########
Public Class Form2
    Inherits BaseForm
End Class

としましたところ、それぞれの
    Inherits BaseForm
のところで
「クラス'Form1'に指定された基本クラス'BaseForm'は、その他のpartical
型の1すである基本クラス'System.Windows.Forms.Form'と異なることはで
きません。」
と怒られます。

その怒られる理由についてどなたか解説頂きたく、よろしくお願いします。

編集 削除
HogeHoge  2008-03-14 11:47:25  No: 144519  IP: 192.*.*.*

書き忘れましたが、VB.NET2005です。

編集 削除
やじゅ  2008-03-14 12:26:10  No: 144520  IP: 192.*.*.*

記事の画像を良く見て味噌
http://www.atmarkit.co.jp/fdotnet/dotnettips/324winbaseform/winbaseform_02.gif

先にBaseFormを作成しないと駄目だよ

編集 削除
HogeHoge  2008-03-14 13:32:27  No: 144521  IP: 192.*.*.*

お世話になっております。

>やじゅさんレスありがとうございます。

最初から作り直してみましたところ、今度は以下のように怒られます。

##########
ファイル内にデザインできるクラスがないため、このファイルのデザイナを表示できませんでした。ファイルの以下のクラスがデザイナで見つかりました: Form1 --- 基本クラス 'FormHaseiTest.FormBase' を読み込めませんでした。アセンブリが参照されているか、およびすべてのプロジェクトがビルドされているかを確認してください。

何か宣言しなければならない箇所で宣言していないとか、そういう類の
ものでしょうか?

編集 削除
癒耶  2008-03-14 13:47:59  No: 144522  IP: 192.*.*.*

初めまして。
FormBaseとForm1、Form2は同プロジェクト内に入っていますか?
(プロジェクトが違う場合には参照をしないといけません)
FormBaseはPrivateになっていたりしませんか?
(Privateになっていると外部から読込めません)
読込めない理由はこのくらいかなと。

編集 削除
HogeHoge  2008-03-14 13:52:50  No: 144523  IP: 192.*.*.*

ヘルプを見ると

##########
このエラーを解決するには
ファイル内の最初のクラスになるようにクラス コードを移動して、デザイナを再度読み込みます。
##########

とありますが

ファイル内の最初のクラスになるようにクラス コードを移動

とはどういうことなのでしょうか?

編集 削除
HogeHoge  2008-03-14 13:59:52  No: 144524  IP: 192.*.*.*

癒耶さん、レスありがとうございます。

FormBaseのDesignerソースコードは以下の通りです。

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class FormBase
    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.Label1 = New System.Windows.Forms.Label
        Me.TextBox1 = New System.Windows.Forms.TextBox
        Me.Button1 = New System.Windows.Forms.Button
        Me.Label2 = New System.Windows.Forms.Label
        Me.Button2 = New System.Windows.Forms.Button
        Me.SuspendLayout()
        '
        'Label1
        '
        Me.Label1.AutoSize = True
        Me.Label1.Location = New System.Drawing.Point(28, 24)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(55, 12)
        Me.Label1.TabIndex = 0
        Me.Label1.Text = "ヘッダ部分"
        '
        'TextBox1
        '
        Me.TextBox1.Location = New System.Drawing.Point(91, 23)
        Me.TextBox1.Name = "TextBox1"
        Me.TextBox1.Size = New System.Drawing.Size(150, 19)
        Me.TextBox1.TabIndex = 1
        Me.TextBox1.Text = "メッセージ"
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(271, 22)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(79, 29)
        Me.Button1.TabIndex = 2
        Me.Button1.Text = "追加"
        Me.Button1.UseVisualStyleBackColor = True
        '
        'Label2
        '
        Me.Label2.AutoSize = True
        Me.Label2.Location = New System.Drawing.Point(28, 296)
        Me.Label2.Name = "Label2"
        Me.Label2.Size = New System.Drawing.Size(52, 12)
        Me.Label2.TabIndex = 3
        Me.Label2.Text = "フッタ部分"
        '
        'Button2
        '
        Me.Button2.Location = New System.Drawing.Point(271, 296)
        Me.Button2.Name = "Button2"
        Me.Button2.Size = New System.Drawing.Size(79, 29)
        Me.Button2.TabIndex = 4
        Me.Button2.Text = "閉じる"
        Me.Button2.UseVisualStyleBackColor = True
        '
        'FormBase
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(371, 350)
        Me.Controls.Add(Me.Button2)
        Me.Controls.Add(Me.Label2)
        Me.Controls.Add(Me.Button1)
        Me.Controls.Add(Me.TextBox1)
        Me.Controls.Add(Me.Label1)
        Me.Name = "FormBase"
        Me.Text = "Form1"
        Me.ResumeLayout(False)
        Me.PerformLayout()

    End Sub
    Friend WithEvents Label1 As System.Windows.Forms.Label
    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents Label2 As System.Windows.Forms.Label
    Friend WithEvents Button2 As System.Windows.Forms.Button

End Class

編集 削除
HogeHoge  2008-03-14 14:18:14  No: 144525  IP: 192.*.*.*

お世話になっております。
FormBaseのDesignerソースコードの

  Partial Class FormBase



  Partial Public Class FormBase

と変更したところ、エラー警告が収まりました。

これでいいのかどうか良く理解できていませんが、由として先に進みます。

お騒がせしました。

編集 削除