我試圖在標題中描述的問題來自我創建一個從面板繼承的自定義控件。它基本上只是一個簡單的面板,但該類包含另一個面板,它自動調整大小(因此可以非常小或甚至不可見)。Visual Studio設計器:在一個面板上拖動控件,但添加到另一個面板
<System.ComponentModel.DefaultEvent("ScrollPossibilitiesChanged")> _
Public Class ScrollPanel
Inherits Panel
Private WithEvents pnlContents As Panel
Public Sub New()
pnlContents = New Panel
pnlContents.AutoSize = True
pnlContents.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink
pnlContents.Location = New System.Drawing.Point(0, 0)
pnlContents.Name = "pnlContents"
MyBase.Controls.Add(pnlContents)
ResetScroll()
LimitScroll = True
End Sub
[...]
End Class
主面板不應該包含任何控件,但pnlContents。相反,pnlContents應該包含其他所有控件。 Codewise我通過Shadowing屬性來實現這一點
Public Shadows ReadOnly Property Controls As ControlCollection
Get
Return pnlContents.Controls
End Get
End Property
因此,當我使用例如項目中的Scrollpanel1.Controls.Add(Button1)
Button1將正確添加到我的控件中的pnlContents中。這工作正常。
問題是,我無法複製Visual Studio Designer中的行爲。如果我將一個控件拖到我的ScrollPanel控件上,它的位置就會回到拖動開始的位置。如果我選擇我的ScrollPanel並從工具箱中雙擊一個控件,我會收到錯誤消息:「child」不是這個父元素的子控件。 (或類似的,由我翻譯成德文)。
據我所知,在設計時,我將元素拖到主面板上,而不是在pnlContents上(因爲它內部沒有任何東西太小)。但是不應該將它添加到pnlContents.Controls中,因爲我隱藏了該屬性?
我可以通過某種方式告訴設計師,當我嘗試向ScrollPanel添加控件時,需要將控件添加到pnlContents.Controls中?
這是在Visual Studio中WinForms應用程序2012
全班可在這裏Google Docs
不使用Google Docs
是的,與TabPage的比較是合適的我猜,我更可能認爲它比實際上是我自己的設計師更復雜。我想我會閱讀你提供的線索,然後決定是否值得爲我的需求帶來麻煩。 – Jens