0

我创建了自己的 Tabcontrol 类,派生自 UserControl,因为我不喜欢现有 Tabcontrol 类的设计。它工作正常,但现在我想为控件添加设计时支持,我不知道如何开始。我已经阅读了一些教程,但没有一个解释如何创建 Tabcontrol。感谢帮助 ;)

编辑:

public class TabListDesigner : ParentControlDesigner
{
    private DesignerVerb addVerb;
    private DesignerVerb removeVerb;
    private DesignerVerbCollection verbs;

    protected TabList TabListControl { get { return this.Control as TabList; } }

    public override DesignerVerbCollection Verbs
    {
        get
        {
            if (verbs == null)
            {
                verbs = new DesignerVerbCollection();

                addVerb = new DesignerVerb("Add TabListPage", this.AddVerbHandler) { Description = "Add a new TabListPage to the parent control." };
                removeVerb = new DesignerVerb("Remove TabListPage", this.RemoveVerbHandler) { Description = "Remove the currently selected TabListPage from the parent control." };

                verbs.Add(addVerb);
                verbs.Add(removeVerb);
            }

            return verbs;
        }
    }

    private void AddVerbHandler(object sender, EventArgs e)
    {
        this.TabListControl.Add();
    }

    private void RemoveVerbHandler(object sender, EventArgs e)
    {
        //this.RemoveSelectedTabListPage();
    }

    public override void InitializeNewComponent(IDictionary defaultValues)
    {
        base.InitializeNewComponent(defaultValues);
        this.TabListControl.Add();
        this.TabListControl.Add();
    }
}

所以这就是我所做的,但它不起作用。TabListControl.Add() 方法有效(我在运行时对其进行了测试,但我想要设计时支持)

我希望能够: - 控件应该在设计时使用 2 个 TabPages 进行初始化 - 在设计时添加/删除 TabPages - 在设计时切换 TabPages - 在设计时将控件添加到不同的 TabPages

4

1 回答 1

1

从理论上讲,在 Visual Studio 中渲染控件时不需要做太多事情 - 自定义 UserControl 的实现将被执行,Visual Studio 将在设计表面上绘制控件,您可以在其中重新调整大小、排列它,等等

要记住的一件事是this.DesignMode财产。如果您的控件在 Visual Studio 中呈现,DesignMode 将是 true,以便您可以在需要时运行一些自定义代码(或者不运行一些代码 - 这就是为什么您经常可以看到包装if (!this.DesignMode) { }在 WinForms 项目中的块中的 WebService 调用)。

为了提供更多建议,我需要您提供更多详细信息 - 您到底想做什么(您需要设计器中的一些自定义功能)以及您使用的 Visual Studio 版本。

编辑:好的,我只是更深入地研究了这个问题——如果你想使用鼠标事件,你似乎正处于有趣的时期,因为它们被“设计”困住了查看这个链接:http://social.msdn。 microsoft.com/Forums/en-US/winforms/thread/81606909-9310-48e8-8b46-5ecafb6e8007

因此,如果您在诸如 Load 之类的事件中使用某些逻辑,则更新自定义控件不会有任何问题 - 但对于更高级的东西(设计器内的交互),您需要更深入地挖掘。例如看这篇文章(链接自:删除 WinForm 控件的原始事件行为

于 2013-03-14T08:15:50.067 回答