2011-04-20 5 views
1

Form1에상속은 첫 번째 자손에는 적용되지만 다음에는 적용되지 않습니다. 왜?

Public Class Form1 

Private Sub But_Bell_Click(sender As System.Object, e As System.EventArgs) Handles But_Bell.Click 
    MessageBox.Show("Ding a ling") 
End Sub 

최종 클래스

먼저 Decendant

Public Class BellsAndWhistles 
Inherits Form1 
Friend WithEvents But_Whistle As System.Windows.Forms.Button 

Private Sub InitializeComponent() 
    Me.But_Whistle = New System.Windows.Forms.Button() 
    Me.SuspendLayout() 
    ' 
    'But_Whistle 
    ' 
    Me.But_Whistle.Location = New System.Drawing.Point(112, 38) 
    Me.But_Whistle.Name = "But_Whistle" 
    Me.But_Whistle.Size = New System.Drawing.Size(75, 23) 
    Me.But_Whistle.TabIndex = 1 
    Me.But_Whistle.Text = "Whistle" 
    Me.But_Whistle.UseVisualStyleBackColor = True 
    ' 
    'BellsAndWhistles 
    ' 
    Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 
    Me.ClientSize = New System.Drawing.Size(292, 273) 
    Me.Controls.Add(Me.But_Whistle) 
    Me.Name = "BellsAndWhistles" 
    Me.Text = "Bells & Whistles" 
    Me.Controls.SetChildIndex(Me.But_Whistle, 0) 
    Me.ResumeLayout(False) 

End Sub 

Private Sub But_Whistle_Click(sender As System.Object, e As System.EventArgs) Handles But_Whistle.Click 
    MessageBox.Show("Toot Toot") 
End Sub 

최종 클래스

First Decendent Designer

둘째 후손

Public Class MoreBellsAndWhistles 
Inherits BellsAndWhistles 
Friend WithEvents MoreBells As System.Windows.Forms.Button 

Private Sub InitializeComponent() 
    Me.MoreBells = New System.Windows.Forms.Button() 
    Me.SuspendLayout() 
    ' 
    'MoreBells 
    ' 
    Me.MoreBells.Location = New System.Drawing.Point(30, 145) 
    Me.MoreBells.Name = "MoreBells" 
    Me.MoreBells.Size = New System.Drawing.Size(75, 23) 
    Me.MoreBells.TabIndex = 1 
    Me.MoreBells.Text = "More Bells" 
    Me.MoreBells.UseVisualStyleBackColor = True 
    ' 
    'MoreBellsAndWhistles 
    ' 
    Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 
    Me.ClientSize = New System.Drawing.Size(292, 273) 
    Me.Controls.Add(Me.MoreBells) 
    Me.Name = "MoreBellsAndWhistles" 
    Me.Text = "MoreBellsAndWhistles" 
    Me.Controls.SetChildIndex(Me.MoreBells, 0) 
    Me.ResumeLayout(False) 

End Sub 

Private Sub MoreBells_Click(sender As System.Object, e As System.EventArgs) Handles MoreBells.Click 
    MessageBox.Show("Ting TIng") 
End Sub 

Private Sub MoreBellsAndWhistles_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 

End Sub 

최종 클래스

Second Descendant Designer

는 어디 호각 버튼을 간?

상속의 클래스 부분은 코드를 통해 액세스 할 수 있기 때문에 효과가 있습니다.

답변

2

두 번째 자손에게 MyBase.InitializeComponent() (으)로 전화 해보세요. 아마도 액세스 수준도 변경해야 할 것입니다.

편집

것은이 밤새 나를 귀찮게했다. 그것은 생성자가 누락 된 경우입니다. 반사경을 사용하면 Form1.vb 또는 Form1.Designer.vb에 존재하지 않더라도 Form1Me.InitializeComponent()을 호출하는 생성자가 있음을 알 수 있습니다.

<DesignerGenerated> _ 
Public Class Form1 
    Inherits Form 
    ' Methods 
    Public Sub New() 
     Me.InitializeComponent 
    End Sub 

    ... 
End Class 

당신이 C# WinForms 응용 프로그램을 만들면 생성자가 표시되어 VB 객체를 숨길 수 있습니다. 또한 수동으로 Sub NewForm1에 추가하면 본질적으로 "숨기기 해제"라는 코드가 자동으로 채워집니다.

나는 VS가 코드를보고 그것이 System.Windows.Forms.Form의 자손이라는 것을 알았지 만 기술적으로는 을 호출하지 않았기 때문에 부적절하게 처리되었습니다 (존재하지 않았기 때문에). 그것은 단지 추측하려고했습니다. 그것은 그것이 만든 양식에 InitializeComponent()에 대한 전화를 추가하는 것을 "알고 있습니다"그리고 당신이보고있는 양식에 대해서는 그것을 "알고 있습니다"그러나 양식의 연속을 걸어 다니며 모든 사람들을 위해 그렇게하지는 않습니다 그들의. 곤충? 아마도.

MoreBellsAndWhistles을 시작 폼으로 설정하면 새로운 단추 중 하나가 표시되지 않습니다. 맞습니까? 이것은 당신이 VS 속임수를 더 많이 말할 수있는 방법입니다. 그 그렇다면하지 않습니다 왜,

Public Sub New() 
    InitializeComponent() 
End Sub 
+0

: Form1이를

Public Sub New() MyBase.New() InitializeComponent() End Sub 

을 그리고 추가

어쨌든, 전체 문제에 대한 솔루션은 하위 클래스에이를 추가하는 것입니다 첫 번째 하강자도 그것을 요구합니까? –

+0

@ Adam Speight, 업데이트 된 게시물을 참조하십시오.그것은 기본적으로 VS 추측입니다. –

+0

문제를 해결해 주셔서 감사합니다. VS Designer에서 대신 vb.net의 기본 Form 인스턴스를 선택하여 "true"이유가 발생했는지 궁금합니다. –

관련 문제