C# 解决方案是否可以具有多个窗体,但在编译时选择其中一个作为主要窗体

本文关键字:窗体 选择 一个 是否 解决方案 编译 | 更新日期: 2023-09-27 18:36:11

基本上,这个程序我想要一个通用的后端,但拥有它,这样我就可以用不同的GUI编译它来控制程序。 我知道我可以制作多种形式,但是有没有办法告诉解决方案进行编译,并说 Form1 是 GUI,然后编译它并告诉它Form2是 GUI(并且不包括Form1在编译的程序中)。

对于具有更多功能的管理员来说,Form1会更多,而Form2对于功能远不如Form1的普通用户来说。 这是可能的,还是我只需要制定新的解决方案?

C# 解决方案是否可以具有多个窗体,但在编译时选择其中一个作为主要窗体

是的,您可以使用条件编译并从编译中完全排除代码。因此,您可以执行类似操作的操作:

#if USER_GUI
public class BasicForm : Form
{
  // ...
}
#endif

#if ADMIN_GUI
public class AdvancedForm : Form
{
  // ...
}
#endif

然后在启动 GUI 调用适当的构造函数时具有类似的#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);
}
编译时,可以在项目 -> 属性 ->

生成 -> 条件编译符号中使用适当的变量设置项目属性,并添加 USER_GUI 或 ADMIN_GUI

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

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设置来说明默认表单应该是什么。

有几种方法可以实现此目的。这是一对

如果您让用户先登录,则可以检查角色,然后

  1. 显示特定于角色的窗体
  2. 具有一个具有隐藏角色特定控件的窗体

这是基于假设,因为您提到了不同的角色。不知道你是怎么回事。

如果您让用户先登录,则登录自实际上是在应用程序启动时运行的默认表单。从那里,您可以创建AdminFormStandardUserForm的新实例,或者只是加载一个表单,在表单上切换一个面板,一个具有管理功能,另一个没有。