C# 在C中启用和禁用窗体#
我在C#中创建了两个表单:form1是主应用程序,form2是登录窗口。form1有一个按钮可以禁用它自己并显示form2,form2有一个按钮可以启用主窗体并关闭它自己。问题是当我尝试使用form2按钮启用form1时(我得到“Application.exe中发生了类型为C# 在C中启用和禁用窗体#,c#,.net,winforms,C#,.net,Winforms,我在C#中创建了两个表单:form1是主应用程序,form2是登录窗口。form1有一个按钮可以禁用它自己并显示form2,form2有一个按钮可以启用主窗体并关闭它自己。问题是当我尝试使用form2按钮启用form1时(我得到“Application.exe中发生了类型为'System.NullReferenceException'的未处理异常”) 以下是form1代码: Login Login = new Login(); Login.Show(); this.Enabled = fals
'System.NullReferenceException'
的未处理异常”)
以下是form1代码:
Login Login = new Login();
Login.Show();
this.Enabled = false;
表格2(登录)代码:
将
form1中的这一行代码从
Login.Show();
到
或在显示之前明确设置所有者,如:
Login.Owner = this;
Login.Show();
否则,该登录表单将没有所有者,并且此。当您尝试访问其成员时,所有者将为null,从而导致NullReferenceException
。在表单1
中更改此代码行
Login.Show();
到
或在显示之前明确设置所有者,如:
Login.Owner = this;
Login.Show();
否则,登录表单将没有所有者,并且此。当您尝试访问其成员时,所有者将为null,从而导致NullReferenceException
。您可以使用,这将使所有其他表单(同一应用程序的)在表单显示期间无法访问:
using (var login = new Login()) {
login.ShowDialog(this);
}
您可以将其中一个值作为返回码传递给调用方法,以将成功或失败传递给调用方法。您可以使用,这将使(同一应用程序的)所有其他表单在表单显示期间无法访问:
using (var login = new Login()) {
login.ShowDialog(this);
}
您可以传递其中一个值作为返回码,以将成功或失败传递给调用方法。因为您在创建登录
表单时未设置其所有者属性,因此它为空。它不会因为你以一种形式打开而自动设置。。。另外,不要这样做:Login Login=new Login()代码>,将变量命名为与正在实例化的类型相同的错误做法,使您在以后需要调用静态方法时很难在不完全限定类型的情况下进行调用。如果要以模态方式显示表单(自动禁用父级),请改为调用ShowDialog。您能解释一下为什么要禁用Form1吗?因为您在创建Login
表单时没有设置其所有者属性,所以它为空。它不会因为你以一种形式打开而自动设置。。。另外,不要这样做:Login Login=new Login()代码>,将变量命名为与正在实例化的类型相同的错误做法,使您在以后需要调用静态方法时很难在不完全限定类型的情况下进行调用。如果要以模态方式显示表单(自动禁用父级),请改为调用ShowDialog。你能解释一下为什么要禁用Form1吗?非常确定这就是OP想要实现的吗?非常确定这就是OP想要实现的