C#解决方案可以有多种形式,但在编译时有一个被选为主要形式吗?

时间:2012-06-04 18:31:00

标签: c# winforms user-interface

基本上,我希望这个程序有一个共同的后端,但是我可以用不同的GUI编译它来控制程序。我知道我可以创建多个表单,但有没有办法告诉解决方案编译,并说Form1是GUI,然后编译它并告诉它Form2是GUI(并且不包括编译程序中的Form1

对于具有更多功能的管理员,

Form1将更多,而Form2将适用于功能远远低于Form1的普通用户。这是可能的,还是我只需要制作新的解决方案?

3 个答案:

答案 0 :(得分:4)

是的,您可以使用conditional compilation并完全排除编译中的代码。所以你可以做类似的事情:

#if USER_GUI

public class BasicForm : Form
{
  // ...
}

#endif

#if ADMIN_GUI

public class AdvancedForm : Form
{
  // ...
}

#endif

然后在启动GUI以调用approriate构造函数

时有类似的#ifdef
public static void Main(string[] args)
{
    // ...

    #if USER_GUI
    var form = new UserForm()
    #endif

    #if ADMIN_GUI
    var form = new AdvancedForm()
    #endif

    Application.Run(form);
}

编译时,可以使用Project中的相应变量设置项目属性 - >属性 - >构建 - >条件编译符号,并添加USER_GUI或ADMIN_GUI

答案 1 :(得分:3)

预计处理器条件会浮现在脑海中。

http://msdn.microsoft.com/en-us/library/4y6tbswk(VS.71).aspx

Form form;
#if USE_FORM_1
form = new Form1();
#else
form = new Form2();
#endif

使用USE_FORM_1定义编译一次,一次没有定义。

注意:我有点想知道是否应将其编译到应用程序中。您也可以编译一次,并使用app.config设置来说明默认表单应该是什么。

答案 2 :(得分:2)

有几种方法可以实现这一目标。这是一对夫妇

如果您要让用户先登录,那么您可以检查角色并

  1. 显示角色特定表单
  2. 拥有一个隐藏角色特定控件的表单
  3. 这是因为你提到了不同的角色。不确定你是怎么回事。'

    如果您要让用户先登录,那么Login from实际上是您在app start运行的默认表单。从那里你可以创建AdminFormStandardUserForm的新实例,或者只需加载一个表单来切换表单上的面板,一个使用Admin功能,另一个没有。