如何进行容器依赖控制?

时间:2014-03-08 05:57:32

标签: c# vb.net winforms user-controls

我正在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中提供解决方案。

1 个答案:

答案 0 :(得分:0)

  1. 要隐藏工具箱中的控件,请添加ToolboxItemAttribute
  2. 要避免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