Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于登录凭据隐藏/显示菜单项_C#_Winforms - Fatal编程技术网

C# 基于登录凭据隐藏/显示菜单项

C# 基于登录凭据隐藏/显示菜单项,c#,winforms,C#,Winforms,在我的项目(C#windows应用程序)中,我有一个登录页面、MDIPParent(组成菜单提示)表单和5-6个子表单。 我想要的是,当用户填写登录凭证时,父窗体将显示一些菜单项,这些菜单项根据其凭证被禁用或隐藏 为了显示,我创建了一个父窗体的参数化构造函数,并在其中传递了用户名和用户类型 登录页面代码: smsparent sp = new smsparent(usertype, username); sp.Show(); this.Hide(); 父窗体代码: pu

在我的项目(C#windows应用程序)中,我有一个登录页面、MDIPParent(组成菜单提示)表单和5-6个子表单。 我想要的是,当用户填写登录凭证时,父窗体将显示一些菜单项,这些菜单项根据其凭证被禁用或隐藏

为了显示,我创建了一个父窗体的参数化构造函数,并在其中传递了用户名和用户类型

登录页面代码:

   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()
了解良好做法。谢谢你的提示!