C# 如何在以管理员身份登录后启用该按钮

C# 如何在以管理员身份登录后启用该按钮,c#,C#,例如,我有一个登录表单和另一个表单。有些按钮是禁用的,因为有些按钮仅用于管理器,我尝试了此代码,然后在调试此消息后调试它弹出窗口对象引用未设置为对象的实例。 if (labelLogAs.Text == "Manager") { (this.Owner as MainMenu).buttonInventory.Enabled = true; } 如果出现错误“对象引用未设置为对象的实例”,则表示某个对象为空。请调试它,以找到确切的空值。在您的情况下,以下表达式之一为null,您可以通过

例如,我有一个登录表单和另一个表单。有些按钮是禁用的,因为有些按钮仅用于管理器,我尝试了此代码,然后在调试此消息后调试它弹出窗口
对象引用未设置为对象的实例。

if (labelLogAs.Text == "Manager")
{
    (this.Owner as MainMenu).buttonInventory.Enabled = true;
}
如果出现错误“对象引用未设置为对象的实例”,则表示某个对象为空。请调试它,以找到确切的空值。在您的情况下,以下表达式之一为null,您可以通过在调试器中单步执行代码并查看表达式来找到它:

  • labelLogAs
  • this.Owner作为主菜单
  • (this.Owner作为主菜单)。按钮库存

对伊利亚·科根答案的补充。使用
as
运算符时,应执行空检查,如下所示:

var owner = (this.Owner as MainMenu);
if(owner == null)
    return;

这只是一个示例,不一定适合您的需要。

您会遇到此错误,因为使用
as
运算符的操作返回了
null
。要避免此错误,您需要执行安全检查。 执行此
安全检查有两个选项:

使用
作为
操作员:

if (labelLogAs.Text == "Manager")
{
   var owner = this.Owner as MainMenu;
   if(owner !=null)
      owner.buttonInventory.Enabled = true;
}
if (labelLogAs.Text == "Manager")
{
   if(this.Owner is MainMenu)
      ((MainMenu)this.Owner).buttonInventory.Enabled = true;
}
使用
is
运算符:

if (labelLogAs.Text == "Manager")
{
   var owner = this.Owner as MainMenu;
   if(owner !=null)
      owner.buttonInventory.Enabled = true;
}
if (labelLogAs.Text == "Manager")
{
   if(this.Owner is MainMenu)
      ((MainMenu)this.Owner).buttonInventory.Enabled = true;
}

安全检查用于避免此错误是由他自行决定的。

实际上,我很少编写这样的代码,因为它有可能导致最糟糕的噩梦,称为“无声故障”。正如我所说,这只是一个例子。当然,在null的情况下返回并不是一个好的实践,因为您已经说过了,尽管如此,您还是可以在事件处理程序中编写这样的代码。如果您不希望在触发事件的源不是特定类型的情况下处理该事件。在这种情况下,这将是一个“无声的失败”。同意。(必须是15个字符)代码可以工作,但在主菜单formXD中按钮Ventory仍然禁用