C# 基于登录凭据隐藏/显示菜单项
在我的项目(C#windows应用程序)中,我有一个登录页面、MDIPParent(组成菜单提示)表单和5-6个子表单。 我想要的是,当用户填写登录凭证时,父窗体将显示一些菜单项,这些菜单项根据其凭证被禁用或隐藏 为了显示,我创建了一个父窗体的参数化构造函数,并在其中传递了用户名和用户类型 登录页面代码:C# 基于登录凭据隐藏/显示菜单项,c#,winforms,C#,Winforms,在我的项目(C#windows应用程序)中,我有一个登录页面、MDIPParent(组成菜单提示)表单和5-6个子表单。 我想要的是,当用户填写登录凭证时,父窗体将显示一些菜单项,这些菜单项根据其凭证被禁用或隐藏 为了显示,我创建了一个父窗体的参数化构造函数,并在其中传递了用户名和用户类型 登录页面代码: smsparent sp = new smsparent(usertype, username); sp.Show(); this.Hide(); 父窗体代码: pu
smsparent sp = new smsparent(usertype, username);
sp.Show();
this.Hide();
父窗体代码:
public smsparent(string usertype, string username)
{
InitializeComponent();
this.usertype= usertype;
this.username = username;
if (string.Compare(usertype,"Accountant") == 0)
{
administratorToolStripMenuItem.Enabled = false;
}
}
问题是if块没有被执行。我尝试过.CompareTo()、Equals(),但它们都不起作用
if (String.Equals(usertype,"Accountant"))
确保您在该方法中顺利进行(日志)
确保您在该方法(Log)中运行良好。如果要比较字符串,请尝试
if(usertype == "Accountant")
{
administratorToolStripMenuItem.Enabled = false;
}
编辑
如果你想让你的比较更加可靠,你可以这样做
if(usertype.Trim().ToLower() == "accountant")
{
administratorToolStripMenuItem.Enabled = false;
}
这将删除
usertype
中前后的所有空格,以及所有小写字母的空格,然后与“accounter”
进行比较如果要比较字符串,请尝试
if(usertype == "Accountant")
{
administratorToolStripMenuItem.Enabled = false;
}
编辑
如果你想让你的比较更加可靠,你可以这样做
if(usertype.Trim().ToLower() == "accountant")
{
administratorToolStripMenuItem.Enabled = false;
}
这将删除
usertype
中前后的所有空格,以及所有小写字母的空格,然后与“accounter”
比较,我将首先检查usertype是否为null,然后进行相等的检查
if (!String.IsNullOrEmpty(usertype) && String.Equals(usertype.ToLower(),"accountant"))
{
...
}
我将首先检查usertype是否为null,然后进行相等的检查
if (!String.IsNullOrEmpty(usertype) && String.Equals(usertype.ToLower(),"accountant"))
{
...
}
您正在禁用administratorToolStripMenuItem,而不是像您在问题标题中所说的那样显示/隐藏。对于if问题,运行时的usertype值是多少?你确定你的案子里是“会计师”吗?(调试!)。在if block之前,我通过在messagebox中传递usertype来检查它。小心,messagebox不是发现细微差别的最佳工具:字符串末尾的空格或类似的东西。还请尝试检查usertype.Length与“accountary.Lengh”或usertype.ToLower()=“accountary.ToLower()”;//两个字符串中的情况是否相同?您正在禁用administratorToolStripMenuItem,而不是像您在问题标题中所说的那样显示/隐藏。对于if问题,运行时的usertype值是多少?你确定你的案子里是“会计师”吗?(调试!)。在if block之前,我通过在messagebox中传递usertype来检查它。小心,messagebox不是发现细微差别的最佳工具:字符串末尾的空格或类似的东西。还请尝试检查usertype.Length与“accountary.Lengh”或usertype.ToLower()=“accountary.ToLower()”;//你的情况在两个字符串中是一样的吗?谢谢,伙计,这帮助了问题的解决。如果你不想让人惊讶的话,usertype
ToLowerInvariant()
会更好,例如土耳其语言环境(我和我是不同的字母)@SamiKuhmonen Neat,我个人从来不用担心它对文化不敏感,但是我可能会开始使用ToLowerInvariant()
来获得良好的实践。谢谢你的提示!感谢老兄,它帮助解决了这个问题,用户类型ToLowerInvariant()中留下了一个空白。
如果你不想让人惊讶的话会更好,例如土耳其语言环境(我和我是不同的字母)@SamiKuhmonen Neat,我个人从来不用担心它对文化不敏感,但我可能会开始使用ToLowerInvariant()
了解良好做法。谢谢你的提示!