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仍然禁用