所以我正在编写一个具有登录屏幕,然后是菜单屏幕的应用程序。
菜单为每个级别的用户启用了不同的按钮。要在用户登录时执行此操作,将分配一个int,让应用程序知道用户登录的级别以及要启用的按钮/报告。
我遇到的问题是当报告关闭并再次调用菜单时,该变量将重置为默认的管理级别。
TableView
此代码用于从登录中提取菜单,将int传递给构造函数。
Menu M = new Menu(Permission);
M.Show();
this.Hide();
现在是菜单代码,它将int赋给类变量。
我有10个不同的报告,当我在报告上点击后退键时,这就是我回调菜单的方式。
public Menu(string Permission)
{
InitializeComponent();
AccessLevel = int.Parse(Permission);
LockKeys();
}
public Menu()
{
InitializeComponent();
LockKeys();
}
现在我明白问题在于它调用了不分配变量的构造函数。现在,我能想到的就是将变量弹回每个报告并返回,只需调用正确的构造函数。
我的问题是,有更简单的方法吗?保存类变量的一些方法,所以每次调用类时都不需要重新实例化它。
Menu shwMenu = new Menu();
shwMenu.Show();
this.Hide();
这是菜单类,我继续回溯,但AccessLevel变量更改为默认值。
由于
答案 0 :(得分:1)
我认为你所寻找的是一个静态的"变量,它是一个类级变量。
private static int AccessLevel;
静态变量在类级别定义,类的所有实例都可以访问它们并修改它们。换句话说,静态变量在类实例之间共享。更多信息:https://msdn.microsoft.com/en-us/library/98f28cdx.aspx?f=255&MSPPError=-2147217396
答案 1 :(得分:0)
另一个选择是使用一个包含所需信息的静态类,例如:
public static class CurrentUser
{
public static string UserName { get; set; }
public static int AccessLevel { get; set; }
}
用户登录时使用的内容:
public void LogUserIn(string userName, string password)
{
//Make sure to reset, so an invalid login doesn't retain data
LogUserOut();
//Do the user validation here
CurrentUser.UserName = userName;
CurrentUser.AccessLevel = 0; //whatever was read from your user database
}
public void LogUserOut()
{
CurrentUser.UserName = "";
CurrentUser.AccessLevel = int.MinValue;
}
然后,当您需要使用访问级别时,您不必担心传递值,例如您的菜单表单如下所示:
public partial class Menu : Form
{
public Menu()
{
InitializeComponent();
LockKeys();
}
private void LockKeys()
{
if(CurrentUser.AccessLevel == 1)
{
//Enable/Disable Controls
}
else if (CurrentUser.AccessLevel == 2)
{
//Enable/Disable Controls
}
else if (CurrentUser.AccessLevel == 3)
{
//Enable/Disable Controls
}
else if (CurrentUser.AccessLevel == 4)
{
//Enable/Disable Controls
}
}
}
作为旁注,为了避免代码重复并提高安全性,您应该像这样创建初始化函数LockKeys
:
private void LockKeys()
{
//Set them all default false, and then only enable.
btnSR.Enabled = false;
btnVSC.Enabled = false;
btnPT.Enabled = false;
btnCT.Enabled = false;
btnTS.Enabled = false;
btnBookJob.Enabled = false;
btnCompJob.Enabled = false;
btnCompServ.Enabled = false;
btnVS.Enabled = false;
if(AccessLevel == 1)
{
btnVS.Enabled = true;
}
else if (AccessLevel == 2)
{
btnBookJob.Enabled = true;
btnCompJob.Enabled = true;
}
else if (AccessLevel == 3)
{
btnBookJob.Enabled = true;
btnCompServ.Enabled = true;
}
else if (AccessLevel == 4)
{
btnTS.Enabled = true;
}
}