UserControl 中的 TabControl 在设计模式下不可编辑

时间:2021-02-19 17:59:59

标签: .net windows winforms user-controls

我正在创建一个简单的向导控件,带有 TabControl 和几个按钮(下一步,返回)。目标是向开发人员提供此用户控件,以便他们可以添加自己的步骤和步骤中的控件。

一切正常,除了能够选择在每个选项卡项中添加和删除控件的选项卡。

如何在设计器中启用可编辑的 tabcontrol。

[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
public partial class WizardControl : UserControl
{
    private Button Button_Final;
    private TabControl TabControl1;
    private UltraTabSharedControlsPage ultraTabSharedControlsPage1;
    private EaseButton Button_Next;
    private EaseButton Button_Back;
    private SplitContainer splitContainer1;
    private WizardContainer wizardContainer1;

    public WizardControl()
    {
        InitializeComponent();
    }

    [Description("Final Button Text"), Category("Data")]
    public string FinalButtonText
    {
        get => Button_Final.Text;
        set => Button_Final.Text = value;
    }

    [Category("Wizard"), Description("Collection of wizard pages.")]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public WizardPages Pages => wizardContainer1.Pages;

    [Category("Wizard"), Description("TabControl")]
    [Browsable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public TabControl TabControl => wizardContainer1.TabControl;        
    
}

}

容器:

[ToolboxItem(true), ToolboxBitmap(typeof(WizardControl))]
[Description("Provides a container for wizard pages.")]
[DefaultProperty("Pages"), DefaultEvent("SelectedPageChanged")]
public class WizardContainer : ContainerControl, ISupportInitialize
{
    private bool initializing;
    public WizardContainer()
    {
        Pages = new WizardPages(this);
        Pages.OnAdd += Pages_OnAdd;
    }

    private void Pages_OnAdd(object sender, NewTabEventArgs e)
    {
        UltraTab tab = new UltraTab();
        tab.Key = e.Id.ToString();
        tab.Text = e.Title;
        TabControl.Tabs.Add(tab);
    }

    public void BeginInit() => initializing = true;

    public void EndInit() => initializing = false;

    [Category("Wizard"), Description("Collection of wizard pages.")]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public WizardPages Pages { get; }

    public Button NextButton
    {
        get
        {
            return (Button)this.Controls.Find("Button_Next", true).ElementAtOrDefault(0);
        }
    }

    public Button BackButton
    {
        get
        {
            return (Button)this.Controls.Find("Button_Back", true).ElementAtOrDefault(0);
        }
    }

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public TabControl TabControl
    {
        get
        {
            return (TabControl)this.Controls.Find("TabControl1", true).ElementAtOrDefault(0);
        }
    }

    public UltraTabSharedControlsPage UltraTabSharedControlsPage
    {
        get
        {
            return (UltraTabSharedControlsPage)this.Controls.Find("ultraTabSharedControlsPage1", true).ElementAtOrDefault(0);
        }
    }

    internal void MoveNext()
    {
        if (TabControl != null && TabControl.SelectedTab != null)
        {
            var index = TabControl.SelectedTab.Index;
            var newIndex = index + 1;
            if (newIndex != TabControl.Tabs.Count)
            {
                TabControl.SelectedTab = TabControl.Tabs[newIndex];
            }
            bool isPageValid = false;
            var page = Pages.ElementAtOrDefault(index);
            if(page != null)
            {
                isPageValid = page.IsValid;
            }

            NextButton.Enabled = newIndex == TabControl.Tabs.Count && isPageValid;
            BackButton.Enabled = newIndex != 0;
        }        
    }

    internal void MoveBack()
    {
        if (TabControl != null && TabControl.SelectedTab != null)
        {
            var index = TabControl.SelectedTab.Index;
            var newIndex = index - 1;
            if (newIndex != -1)
            {
                TabControl.SelectedTab = TabControl.Tabs[newIndex];
            }

            NextButton.Enabled = newIndex != TabControl.Tabs.Count;
            BackButton.Enabled = newIndex != 0;
        }
    }
}

0 个答案:

没有答案