我正在C#应用程序中创建一个Wizard Control。所以,我创建了两个类 XWizardControl 和 XWinzardPage 。 XWizardPage的集合将在XWizardControl中创建。用户可以像在TabControl中的TabPage一样在XWizardControl中手动添加XWizardPage的数量。 我的问题是开发人员无法直接在任何其他容器或表单中使用该XWizardPage控件。他们无法直接添加到任何容器中。但是他们可以从编辑器创建对象,它不应该显示在我的ToolBox中。所以,我很困惑我应该使用什么属性来隐藏ToolBox中的PageControl,以及如何避免用户将该控件添加到任何其他容器控件中。
类宣言如下:我不想让你困惑。所以,我只是发表声明。
//Main Control
public partial class XWizardControl : DevExpress.XtraEditors.XtraUserControl
{
public XWizardPageCollection Pages
{ get; set; }
}
//Collection of WizardPage
class XWizardPageCollection : IEnumerable<XWizardPage>, ICollection<XWizardPage>
//Wizard Page
public partial class XWizardPage : DevExpress.XtraEditors.XtraPanel, IComparable<XWizardPage>
{
//Some Properties
public XWizardPage() //Contructor
}
如果您需要更多规格,请告诉我。我将编辑我的问题,在更新:
中提供详细信息您也可以在VB中提供解决方案。
答案 0 :(得分:0)
XWizardPage
成为XWizardControl
以外的其他控件的父级(在设计时),您需要创建自定义ControlDesigner并覆盖CanBeParentedTo
。< / LI>
醇>
示例强>
Public Class XWizardPageDesigner
Inherits PanelDesigner
Public Overrides Function CanBeParentedTo(ByVal parentDesigner As IDesigner) As Boolean
Return ((Not parentDesigner Is Nothing) AndAlso TypeOf parentDesigner.Component Is XWizardControl)
End Function
End Class
<ToolboxItem(False), Designer(GetType(XWizardPageDesigner))> _
Public Class XWizardPage
Inherits DevExpress.XtraEditors.XtraPanel
Implements IComparable(Of XWizardPage)
End Class
<强>更新强>
此外,您可能希望为XWizardControl
创建自定义ControllCollection并覆盖add
,以便只能添加XWizardPage
。
Public Class XWizardControl
Inherits DevExpress.XtraEditors.XtraUserControl
Protected Overrides Function CreateControlsInstance() As Control.ControlCollection
Return New XWizardControlCollection(Me)
End Function
Private Class XWizardControlCollection
Inherits DevExpress.XtraEditors.XtraUserControl.ControlCollection
Public Sub New(owner As XWizardControl)
MyBase.New(owner)
End Sub
Public Overrides Sub Add(ByVal value As Control)
If (Not TypeOf value Is XWizardPage) Then
Throw New ArgumentException()
End If
MyBase.Add(value)
End Sub
End Class
End Class