使用另一种forms的方法中的值

我有以下情况:我做的程序有三种types的用户帐户:超级用户,pipe理员和顾问。

login表单运行良好,通过一种方法,我可以得到用户的types,并打开所述用户的各自主表单。

问题是这样的:有一些用户共享的forms。 但是,我不知道如何让应用程序知道这三个主要forms中哪一个必须返回,这取决于用户。

问题是:有一种方法来保持login表单中的值(用户types),并在其他表单上使用它?

以下是我如何获取数据库中的types值:

public string sacartipo() {string tipo = ""; username = usuario.Text; obj.Usuario = usuario.Text; password = contra.Text; obj.Contrasena = contra.Text; tipo = obj.Logeo(username, password); return tipo; //This is the variable that stores the type of user. } 

Solutions Collecting From Web of "使用另一种forms的方法中的值"

使每个表单的构造函数接受用户类型,以便每当你显示一个新表单时,告诉它哪个用户将使用它。

您可以将用户类型(在用户登录之后)存储在会话变量(如Session["role"]=value并将其用于您想要的任何位置。

您可以将用户存储在枚举中

 public enum Users { Superuser, Administrator, Consultant } 

并在应用程序中有一个Users类型的静态对象,随处可见(全局)

 public Users User; 

Login分配适当的值给User静态对象,例如。

 MyApplication.User = Users.Consultant; 

并在每种形式检查用户的权限,例如,

 var adminPageAllowedUsers = new[] {Users.SuperUser, Users.Administrator}; if(admingPageAllowedUsers.Contains(MyApplication.User)) { //do the rest } else { //redirect user to another form } 

这是我想给你的逻辑,代码没有测试,所以请原谅我可能的错误。

假设sacartipo()是Form1的一个方法,并且您想调用它获取返回值,则在Form2中添加以下方法:

 string GetTipo() { var currentContext=SynchronizationContext.Current; var tipoLocal=default(string); SendOrPostCallback d= dummy => { using(var x=new Form1()) tipoLocal=x.sacartipo(); }; if(null!=currentContext) currentContext.Send(d, null); else d(null); return tipoLocal; } 

在Form2的代码中,你调用了GetTipo(),你期望做的事情已经完成了。