如何动态创建表单?

时间:2017-03-29 21:59:23

标签: c# sql winforms

我想根据用户的类型动态创建表单。例如: 我希望,如果是管理员,专门为此用户创建表单或按钮。  在我的登录代码中,有一个标识用户类型的验证。 但是我只是在确定用户将其发送到相应的屏幕并且其按钮已经设置时才这样做,但我想要的是在识别用户类型时,生成用户应该有权访问的按钮; 用户具有一种类型的用户,并且该类型的用户具有一个或多个权限,然后,根据用户拥有的权限,创建按钮。每个权限都是一个按钮。 例: 用户Alfonso是销售类型,具有发票和销售的权限,然后当它启动会话时发票"发票"和"出售"按钮将被生成。

3 个答案:

答案 0 :(得分:2)

  1. 创建“UserType”表:

    exec*
  2. 创建“菜单”或“选项”表:

    |   id   |   userType      |
    |--------------------------|
    |   1    |   Administrator |
    |   2    |   Sales         |
    
  3. 按用户类型表(包含选项列表)

    创建权限
    |   id   |   option   |
    |---------------------|
    |   1    |   Invoice  |
    |   2    |   Sell     |
    
  4. 在应用程序中创建所有选项[动态](使用数据库中的选项创建按钮)

  5. 当Login获取用户类型
  6. 的所有权限时
  7. 将所有按钮的visible属性更改为false,但用户类型表
  8. 上的权限除外

    这就是我的想法,所有这些都可以从DataBase

    配置

答案 1 :(得分:0)

最简单的方法是创建从Form继承的类,并添加所需的控件并将控件的属性设置为您想要的。当您需要表单时,只需创建一个new表单即可。如有必要,您可以通过构造函数传递设置表单所需的参数。

答案 2 :(得分:0)

以下是一个示例,说明如何根据用户类型打开不同的表单。根据您的要求重新设计时,您可以进一步优化它。 在下面的代码假设中,FUser1FUser2是根据userType变量打开的两种表单。

private FUser1 fUser1;
private FUser2 fUser2;
private FUser2 fUserAdmin;

private void OpenForm(int userType)
{
    switch (userType)
    {
        case 1:
            if (fUser1 == null)
            {
                fUser1 = new FUser1();
                //do initialization specific to FUser1
                fUser1.txtLogin.Text = "Robinhood";
            }
            fUser1.Show();
            break;
        case 2:
            if (fUser2 == null)
            {
                fUser2 = new FUser2();
                //do initialization specific to FUser2
                fUser2.btnProcess.Enable = false;
                fUser2.btnPermit.Visible = false;               
            }
            fUser2.Show();
            break;
        case 3: //Admin
            if (fUserAdmin == null)
            {
                fUserAdmin = new FUser2();
                //do initialization specific to FUser2
                fUserAdmin.btnProcess.Enable = true;
                fUserAdmin.btnPermit.Visible = true;
                fUserAdmin.ProcessSales(); //Public function in FUser2
            }
            fUserAdmin.Show();
            break;
    }         
}