C# 布尔值本身设置为false
我的问题是C# 布尔值本身设置为false,c#,C#,我的问题是bool rememberMe会自动将其值设置为false,我不知道为什么 public partial class Example1 : Form { public Example1() { InitializeComponent(); } public bool rememberMe; public void TryLogin() { if (checkboxRememberMe.Checked)
bool rememberMe
会自动将其值设置为false,我不知道为什么
public partial class Example1 : Form
{
public Example1()
{
InitializeComponent();
}
public bool rememberMe;
public void TryLogin()
{
if (checkboxRememberMe.Checked)
rememberMe = true;
else
rememberMe = false;
var e2 = new Example2();
}
public bool CheckRememberMe()
{
if (rememberMe == true)
return true;
else
return false;
}
}
public partial class Example2 : Form
{
public Example2()
{
InitializeComponent();
var lf = new Example1();
if (lf.CheckRememberMe() == true)
// ...
else
// ...
}
}
如您所见,这是Windows窗体应用程序。首先是TryLogin()
方法,它将rememberMe
设置为true
。然后,运行公共示例2()。问题是在脚本的这一部分
var lf = new LoginForm();
if (lf.CheckRememberMe() == true)
// ...
else
// ...
显示lf.CheckRememberMe()
等于false
。问题是什么?我该如何解决
var lf = new LoginForm();
这将创建一个新的登录表单-因此它不会有其他登录表单所做的更改
您必须传递变量,或使其成为静态变量
尝试将构造函数更改为:
public Example2(bool rememberMe){
this.rememberMe = rememberMe;
InitializeComponent();
}
然后通过它:
var e2 = new Example2(rememberMe);
或者您可以(但可能不应该)将其更改为静态变量:
public static bool rememberMe;
并按类名引用:
if (Example1.rememberMe == true)
如果您只是想让它快速工作,那么请阅读面向对象的基础知识,这是因为您从未运行过TryLogin
函数欢迎使用堆栈溢出。请学习如何使用堆栈溢出,并阅读如何提高问题的质量。然后,您的问题将包含您的完整源代码,这些源代码可以由其他人编译和测试。请将Example1
和Example2
重命名为有意义的类名。还有,什么是LoginForm
,它实际上是Example1
?@Fabjan我知道,但是我没有在这里写这个脚本,因为它太复杂了long@Progman是的,LoginForm实际上是示例1,很抱歉弄错了,我已经编辑过了,现在应该可以了哦,谢谢!使布尔静电工作!reaaaaaallyyyy谢谢你man@CodeBr3akerSon但是,一定要仔细阅读一下为什么这样做,因为这样做是不合适的可伸缩设计。当他说你可能不应该这样做时,你应该注意。将其设置为static意味着类的每个实例都将共享此变量。更改一个实例上的值将更改每个实例上的值false
是布尔值的默认值。除非您将其设置为其他内容,否则它将是错误的。在检查是否rememberMe==true
之前,可以调用TryLogin
,或者将rememberMe设置为可为null的布尔值,这样它将为null,直到将其设置为true或false为止。将其设置为静态并不是一个好的选择。