我有一个功课,我应该用用户登录做一个会计应用程序。我的问题是,我必须使用{get,set}但我不知道如何正确使用它们。有一个名为'UserLogin的类.cs'和一个表单'UserLoginForm.cs'。在userLoginForm中有两个maskedTextBoxes: maskedTextBoxID和maskedTextBoxPass。
当我点击userLoginForm上的登录按钮时,它会调用userloginclass中的一个函数来检查id和pass是否正确?
问题是,当我点击登录按钮时,来自maskedTextBoxes的id和pass不是我在点击登录之前输入的,它们总是被屏蔽的文本框的第一个值:空...
如果我输入123作为id而123输入pass,那么如果我在功能中检查它们,如果id是“123”并且传递是“123”,则会出现错误的id& pass消息。
这一次:如果我输入123作为id而123输入为pass,那么如果在函数中检查它们,如果id是“”并且pass是“”(这是它们的第一个值),则登录是成功的。
问题出在哪里?
以userlogin格式
public partial class UserLoginForm : Form
{
public UserLoginForm()
{
InitializeComponent();
}
public string userID
{
get
{
return maskedTextBoxID.Text;
}
}
public string userPASS
{
get
{
return maskedTextBoxPass.Text;
}
}
private void button_enter_Click(object sender, EventArgs e)
{
UserLogin ulogcs = new UserLogin();
ulogcs.checklogin();
在用户登录类中:
public void checklogin()
{
UserLoginForm uform = new UserLoginForm();
if (uform.userID == "123" && uform.userPASS == "123")
{
MessageBox.Show("Welcome to the bank");
AccountForm aform = new AccountForm();
aform.Show();
}
else
{
MessageBox.Show("Error");
}
}
抱歉语法(我不是母语)
答案 0 :(得分:1)
你非常接近。因为您在“UserLogin”类中实例化了一个新的UserLoginForm
对象,所以它以默认数据(空字符串)而不是用户输入的数据开始。
最快的解决方法是只传递表单:
private void button_enter_Click(object sender, EventArgs e)
{
UserLogin ulogcs = new UserLogin(this);
ulogcs.checklogin();
在用户登录类中:
private UserLoginForm uform;
public UserLogin(UserLoginForm loginForm)
{
uform = loginForm;
}
public void checklogin()
{
if (uform.userID == "123" && uform.userPASS == "123")
...
}
在此代码中,我们使用this
关键字来获取对当前对象(表单本身)的引用,并将其传递给UserLogin类的参数化构造函数。当我们调用checklogin
时,它会将其存储起来以获取数据。
最好只传递数据:
private void button_enter_Click(object sender, EventArgs e)
{
UserLogin ulogcs = new UserLogin();
ulogcs.checklogin(userID, userPASS);
在用户登录类中:
public void checklogin(string user, string password)
{
if (user == "123" && password == "123")
...
}
在此代码中,我们认识到userlogin
不应该关心数据的来源,只需要数据。因此,我们更改checklogin
的签名以接受用户名和密码,然后使用它们。不需要参考表格(或者它甚至存在的知识)。
答案 1 :(得分:1)
您需要更改此功能的定义
public void checklogin()
{
UserLoginForm uform = new UserLoginForm();
if (uform.userID == "123" && uform.userPASS == "123")
{
MessageBox.Show("Welcome to the bank");
AccountForm aform = new AccountForm();
aform.Show();
}
else
{
MessageBox.Show("Error");
}
}
到
public void checklogin(string user, string pass)
{
if (user== "123" && pass == "123")
{
MessageBox.Show("Welcome to the bank");
AccountForm aform = new AccountForm();
aform.Show();
}
else
{
MessageBox.Show("Error");
}
}
并将其命名为
ulogcs.checklogin(uform.userID,uform.userPASS);
你不需要创建这个
UserLoginForm uform = new UserLoginForm();
因为这会创建新表单,但不会包含您输入的值