Click here to Skip to main content
15,885,365 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
I have created a new Custom Control inheriting from Bar control of DevComponents.DotNetBar controls. Next, I have created a new dock tab in it and have added my other controls to it.
After I compile my Custom Control and add my created Custom Control in a new Windows Form, Dock Tab Controls are editable at design time.
I don't want that anybody can edit these controls (Dock Tab Controls) in design time. How can I disable editing the controls at design time from the form (not the same as editing the control itself)?

C#
public partial class barFloorsGrouping : Bar
{
    public barFloorsGrouping()
    {
        InitializeComponent();
    }
    
    [ReadOnly(true)]
    public new System.Windows.Forms.AccessibleRole AccessibleRole
    {
        get { return base.AccessibleRole; }
        private set { base.AccessibleRole = System.Windows.Forms.AccessibleRole.ToolBar; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool AlwaysDisplayDockTab
    {
        get { return base.AlwaysDisplayDockTab; }
        private set { base.AlwaysDisplayDockTab = true; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool AlwaysDisplayKeyAccelerators
    {
        get { return base.AlwaysDisplayKeyAccelerators; }
        private set { base.AlwaysDisplayKeyAccelerators = true; }
    }

    [ReadOnly(true)]
    public new bool AntiAlias
    {
        get { return base.AntiAlias; }
        private set { base.AntiAlias = true; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool AutoCreateCaptionMenu
    {
        get { return base.AutoCreateCaptionMenu; }
    }

    [ReadOnly(true)]
    public new bool AutoHide
    {
        get { return base.AutoHide; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool AutoHideTabTextAlwaysVisible
    {
        get { return base.AutoHideTabTextAlwaysVisible; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool AutoSyncBarCaption
    {
        get { return base.AutoSyncBarCaption; }
        private set { base.AutoSyncBarCaption = true; }
    }

    [Browsable(false), ReadOnly(true)]
    public new eBarType BarType
    {
        get { return base.BarType; }
        private set { base.BarType = eBarType.DockWindow; }
    }

    [ReadOnly(true)]
    public new bool CanAutoHide
    {
        get { return base.CanAutoHide; }
    }

    [ReadOnly(true)]
    public new bool CanDockTab
    {
        get { return base.CanDockTab; }
        private set { base.CanDockTab = false; }
    }

    [ReadOnly(true)]
    public new bool CanUndock
    {
        get { return base.CanUndock; }
        private set { base.CanUndock = false; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool CloseSingleTab
    {
        get { return base.CloseSingleTab; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool DisplayMoreItemsOnMenu
    {
        get { return base.DisplayMoreItemsOnMenu; }
        private set { base.DisplayMoreItemsOnMenu = true; }
    }

    [ReadOnly(true)]
    public new DockStyle Dock
    {
        get { return base.Dock; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool DockTabCloseButtonVisible
    {
        get { return base.DockTabCloseButtonVisible; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool FadeEffect
    {
        get { return base.FadeEffect; }
        private set { base.FadeEffect = true; }
    }

    [Browsable(false), ReadOnly(true)]
    public new eGrabHandleStyle GrabHandleStyle
    {
        get { return base.GrabHandleStyle; }
        private set { base.GrabHandleStyle = eGrabHandleStyle.Caption; }
    }

    [Browsable(false), ReadOnly(true)]
    public new eLayoutType LayoutType
    {
        get { return base.LayoutType; }
        private set { base.LayoutType = eLayoutType.DockContainer; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool MenuBar
    {
        get { return base.MenuBar; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool TabNavigation
    {
        get { return base.TabNavigation; }
        private set { base.TabNavigation = true; }
    }

    [Browsable(false), ReadOnly(true)]
    public new bool WrapItemsDock
    {
        get { return base.WrapItemsDock; }
        private set { base.WrapItemsDock = true; }
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);
    }
}
Posted
Updated 28-Aug-12 4:35am
v10

Assuming you are not in Silverlight or WPF, you can check for the Component.DesignMode Property[^] - you need to do this recursively using the Parent property for the control.

Best regards
Espen Harlinn
 
Share this answer
 
Comments
MRS1989 26-Aug-12 11:39am    
Can you explain that? I'm not very familiar with manipulating controls.
Wendelius 26-Aug-12 17:22pm    
To Espen: Good advice, 5'ed. I actually wrote a small tip about this and how the DesignMode can be resolved from outside the control (since it's protected). If you want to have a look, its Resolve DesignMode for a user control[^]. If you want to make changes etc. to it. I'd be more than happy to add you as a co-author.
MRS1989 27-Aug-12 0:27am    
Thanks for your comment. It was useful for me but was irrelevant to my problem.
My problem is disabling child controls of a custom control that are enabled by default. I don't want that user can select it, see their properties and change them.
You explain that how can understand a control (include UserControl or CustomControl) is in design mode or not. I know about it. However, I want that prevent from select automatically created child controls by other users.
Thank you in advance for any help.
Wendelius 27-Aug-12 0:33am    
Thanks for the comment. Yes I noticed that this is a different situation, but it was just giving the idea for a small tip :)
MRS1989 27-Aug-12 3:13am    
So, U can help me???
You must extend the design mode behavior by using ParentControlDesigner Class. ParentControlDesigner Class provides a base class for designers of controls that can contain child controls.
So, for achieve to your Goal, you must implement design-time services for a component by DesignerAttribute as the following (Just add below code before the written class):

C#
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
public partial class barFloorsGrouping : Bar
{
...
}
 
Share this answer
 
Just define a bool property and add a condition at beginning of the method that creates controls automatically.

C#
bool AllowCreate;

C#
public void Do()
{
    if (AllowCreate)
    {
        // your code to create controls
    }
}
 
Share this answer
 
Comments
MRS1989 26-Aug-12 11:48am    
My problem is in design architect. Espen Harlinn is understood right my problem; however, I'm new to this subject of programming in C#.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900