2013-12-22 57 views
0

我試圖在標題中描述的問題來自我創建一個從面板繼承的自定義控件。它基本上只是一個簡單的面板,但該類包含另一個面板,它自動調整大小(因此可以非常小或甚至不可見)。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

回答

2

首先非常糟糕的榜樣,做影子Controls財產。它可能可能適用於「僅限運行時」控件,但在設計時它可能會導致一些意外問題。考慮創建一個反映pnlContents中控件的屬性。

<Browsable(False)> _ 
Public ReadOnly Property Contents() As ControlCollection 
    Get 
     Return Me.pnlContents.Controls 
    End Get 
End Property 

<EditorBrowsable(EditorBrowsableState.Never)> _ 
Public Shadows ReadOnly Property Controls() As ControlCollection 
    Get 
     Return MyBase.Controls 
    End Get 
End Property 

其次,你需要創建一個自定義ControlDesignerParentControlDesigner。如果我正確理解你,你正試圖創建一個像TabControl一樣TabPage。創建這個設計師是可行的,但比你想象的要複雜一點。

結論

我建議你拖動System.Design.dllReflector,看看MS創造了他們TabControlDesigner。您還應該閱讀MSDN上的extending design-Time support

+0

是的,與TabPage的比較是合適的我猜,我更可能認爲它比實際上是我自己的設計師更復雜。我想我會閱讀你提供的線索,然後決定是否值得爲我的需求帶來麻煩。 – Jens

相關問題