c#使用get set从文本框中获取字符串,而不是发送另一个类?

时间:2014-05-28 15:57:10

标签: c# class textbox get set

我有一个功课,我应该用用户登录做一个会计应用程序。我的问题是,我必须使用{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");
        }
    }

抱歉语法(我不是母语)

2 个答案:

答案 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();

因为这会创建新表单,但不会包含您输入的值