基本上,这个程序我想有一个通用的后端,但是有了它,我可以用不同的 GUI 编译它来控制程序。我知道我可以制作多个表单,但是有没有办法告诉解决方案进行编译,并说 Form1 是 GUI,然后再编译它并告诉它Form2
是 GUI(并且不包含Form1
在编译的程序)。
Form1
对于具有更多功能的管理员来说,这Form2
将更多,而对于功能远低于Form1
. 这可能吗,还是我只需要制定一个新的解决方案?
基本上,这个程序我想有一个通用的后端,但是有了它,我可以用不同的 GUI 编译它来控制程序。我知道我可以制作多个表单,但是有没有办法告诉解决方案进行编译,并说 Form1 是 GUI,然后再编译它并告诉它Form2
是 GUI(并且不包含Form1
在编译的程序)。
Form1
对于具有更多功能的管理员来说,这Form2
将更多,而对于功能远低于Form1
. 这可能吗,还是我只需要制定一个新的解决方案?
是的,您可以使用条件编译并从编译中完全排除代码。所以你可以做类似的事情:
#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);
}
编译时,可以在 Project -> Properties -> Build -> Conditional compilation symbols 中使用适当的变量设置项目属性,并添加 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
设置来说明默认表单应该是什么。
有几种方法可以实现这一点。这里有一对
如果您让用户先登录,那么您可以检查角色,然后
这是假设因为您提到了不同的角色。不知道你是怎么做的。
如果您首先让用户登录,那么登录自实际上是您在应用程序启动时运行的默认表单。从那里您可以创建新实例AdminForm
或StandardUserForm
仅加载一个表单在表单上切换面板,一个具有管理功能,另一个没有。