嵌入用户控件是个坏主意?

时间:2009-08-18 15:13:51

标签: c# .net winforms user-controls

我在一个面板中嵌入usercontrols并使用 DevExpress Navigator 控件从一个控件导航到另一个控件。我所担心的是对这种方法有什么影响?

我会举出一些我关注的例子,但后来我不需要问这个问题......

我有一个主要表单, ShellForm 左侧有一个停靠的导航器控件,其余部分有一个停靠的 Panel Control 。然后,当单击链接时,我会在面板中停靠用户控件,例如 ucSearchPage

    public partial class ShellForm : XtraForm
{
    private ucSearch searchPage = new ucSearch();
    private ucEnrollments enrollmentPage = new ucEnrollments();
    private ucGeneral generalInfoPage = new ucGeneral();
    private ucContacts contactPage = new ucContacts();

    public ShellForm()
    {
        InitializeComponent();
    }

    private void ShellForm_Load(object sender, EventArgs e)
    {
        this.pnlShellHost.DockControl(this.searchPage);
    }

    private void navSearch_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
    {
        this.pnlShellHost.DockControl(this.searchPage);
    }

    private void navEnrollment_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
    {
        this.pnlShellHost.DockControl(this.enrollmentPage);
    }

DockControl()的代码如下 - >

        public static void DockControl(this Control control, UserControl userControl)
    {
        userControl.Dock = DockStyle.Fill;
        control.Controls.Clear();
        control.Controls.Add(userControl);
    }

这种方法有什么影响吗?它只是计划愚蠢吗?

我是那些必须学会在走路前跑步的程序员之一,所以我倾向于趴在脸上!

总共将有大约30个用户控件。

欢迎并赞赏任何见解!

1 个答案:

答案 0 :(得分:3)

IMO嵌入用户控件根本不是一个坏主意。事实上,这正是他们的意思。因为每个控件都从相同的基类继承,所以您可以使用Composite pattern构建控件的树结构。这将允许您创建任何您想要的东西。

如果你想到一个基本的网页,这实际上就是你正在做的事情:将一个元素放在另一个元素中,或嵌入它们。您可以在其他div中使用多个div等。当您将用户控件嵌入到基本HTML时嵌入用户控件时,这基本上就是您所做的。

希望这有帮助。

编辑:要解决评论中的问题...我认为从数据输入的角度来看,您不会遇到任何问题。原因是您为注册控制和搜索控件使用不同的用户控件。我假设你正在覆盖每个用户控件中的OnLoad事件吗?回发后发生的事情是,如果加载了搜索控件,搜索的OnLoad将被点击,而如果加载了搜索控件,则会点击注册的OnLoad。

由于用户控件的多态性,您可以单独处理这些控件的数据。