【发布时间】:2014-01-10 17:07:48
【问题描述】:
我试图在标题中描述的问题源于我创建了一个继承自 Panel 的自定义控件。它基本上只是一个简单的面板,但该类在其中包含另一个自动调整大小的面板(因此它可以非常小甚至不可见)。
<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 我通过隐藏 Controls 属性来实现这一点
Public Shadows ReadOnly Property Controls As ControlCollection
Get
Return pnlContents.Controls
End Get
End Property
所以当我使用例如项目 Button1 中的 Scrollpanel1.Controls.Add(Button1) 将正确添加到我的控件内的 pnlContents 中。这很好用。
问题是,我无法在 Visual Studio 设计器中复制该行为。如果我将一个控件拖动到我的 Scrollpanel 控件上,它的位置只会翻转回拖动开始的位置。如果我选择我的 Scrollpanel 并双击工具箱中的控件,我会收到错误消息:“child” is no sub control of this parent element。 (或类似的,由我从德语翻译)。
我知道在设计时,我将元素拖到主面板上而不是 pnlContents 上(因为它太小了,里面什么都没有)。但是,既然我隐藏了该属性,难道不应该将它添加到 pnlContents.Controls 中吗?
当我尝试将控件添加到 Scrollpanel 时,我能否以某种方式告诉设计人员它需要将控件添加到 pnlContents.Controls?
这是 Visual Studio 2012 中的 WinForms 应用程序。
整个班级都在这里Google Docs
不是很漂亮的用法示例Google Docs
【问题讨论】:
标签: vb.net winforms visual-studio panel