代码之家  ›  专栏  ›  技术社区  ›  Steve Weet

在设计时向选项卡页添加控件的标准方法是什么?

  •  1
  • Steve Weet  · 技术社区  · 14 年前

    我正在创建第一个部署在Windows Mobile上的Windows窗体应用程序,在设计选项卡式界面时遇到了一些问题。

    我假设可以创建一个TabControl,然后添加一些TabPages,然后依次将控件拖到每个选项卡页上。这似乎是不可能的,我在网上看到的大多数信息似乎都建议在运行时动态添加控件。

    我是否遗漏了一些明显的东西,或者这确实是正确的?

    如果必须在运行时添加控件,那么人们通常如何管理设计过程。他们是否为每个选项卡创建一个自定义的用户控件,然后在运行时添加它?

    设计环境(C Visual Studio 2005,.NET 2.0) 运行时环境(Windows Mobile 6.1)

    更新1

    在Visual Studio中采取的实际步骤如下:

    1. 选择新项目->智能设备->Windows Mobile 6专业版->设备应用程序
    2. 向窗体1添加了TabControl。这将自动添加tabpage1和tabpage2

    更新2

    解决这个问题的办法是令人难堪的中午。TabControl将选项卡放在页面底部,我做的第一件事是将选项卡控件调整为单行,然后隐藏TabPage控件。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Oliver    14 年前

    目前我不使用Windows Mobile,但我认为它的工作原理完全相同。

    添加一个 TabControl 对于表单,您应该查看属性并搜索 TabPages . 在这里,您可以向控件添加和删除新的选项卡页,并在设计器中根据需要进行设计。

    关于在每个选项卡页上使用用户控件的问题,我肯定会说 是的 . 这样可以更容易地在每一页和每一页上发生的事情之间进行分离。

    最后一步,我将把所需的代码从designer.cs移到我自己的函数(例如 var tabControl = CreateTabControl() 我的所有属性都在这里设置。然后我把我所有的 UserControls 变成一个

    private IEnumerable<Type> GetAllTypes()
    {
        yield return typeof(MyFirstControl);
        yield return typeof(MySecondControl);
    }
    

    做一个

    private void CreateTabPages(TabControl tabControl, IEnumerable<Type> types)
    {
        foreach(var type in types)
        {
            var control = Activator.CreateInstance(type);
            var tabPage = new TabPage();
            tabPage.Controls.Add(control);
            tabControl.TabPages.Add(tabPage);
        }
    }
    

    然后由

    CreateTabPages(tabControl, GetAllTypes());
    

    使用这种方法,我可以很容易地用一行代码添加另一个标签页,并在自己的范围内进行设计。

        2
  •  1
  •   Jonathan    14 年前

    我刚打开VS2008并创建了一个TabControl,然后使用设计器中的拖放功能在内部添加了控件,没有发现任何问题。

    我使用的方法是为每个选项卡创建一个用户控件,但我将用户控件添加到设计器中的选项卡。(请注意,在生成解决方案之前,用户控件不会出现在工具箱中)。

    我不知道你的方法为什么不起作用。在尝试添加控件之前是否停止了应用程序?

    祝你好运。