我有3节课。一个是AuthenticateUser,它允许我设置和获取用户信息,如用户名和密码。在其他类中,AddEntryWindow是一个WinForm,我试图在其中显示来自AuthenticateUser的Password和UserName属性的内容。第三类是另一个WinForm类,它允许我为AuthenticateUser类设置用户名和密码。在我尝试的时候,在这个简化的例子中,为了显示WinForm类的用户名和密码,我得到一个空白的消息框。此外,当在AuthenticateUserWindow中使用另一个消息框时,我能够获取属性的内容。
如何解决这个问题,以便能够在AddEntryWindow类中查看属性的内容?在过去的一小时里,我一直盯着这个。
可能是行:AuthenticateUser authenticateUser = new AuthenticateUser();
创建了一个新对象。但它会在哪里呢?
AddEntryWindow.cs中最可能出现的问题
using System;
using System.Windows.Forms;
// Needed to be used with StringBuilder
using System.Text;
// Needed to be used with ArrayList.
using System.Collections;
namespace Store_Passwords_and_Serial_Codes
{
public partial class AddEntryWindow : Form
{
// Making authentication possible.
AuthenticateUser authenticateUser = new AuthenticateUser();
// Default constructor to initialize the form.
public AddEntryWindow()
{
InitializeComponent();
}
private void btnAddEntry_Click(object sender, EventArgs e)
{
MessageBox.Show(authenticateUser.UserName + authenticateUser.Password);
}
}
}
AuthenticateUser.cs
using System;
namespace Store_Passwords_and_Serial_Codes
{
class AuthenticateUser
{
private string userName, password;
public AuthenticateUser()
{
}
public AuthenticateUser(string userNamePassed, string passwordPassed)
{
this.userName = userNamePassed;
this.password = passwordPassed;
}
public string UserName
{
get
{
return userName;
}
set
{
userName = value;
}
}
public string Password
{
get
{
return password;
}
set
{
password = value;
}
}
}
}
AuthenticateUserWindow.cs
using System;
using System.Windows.Forms;
namespace Store_Passwords_and_Serial_Codes
{
public partial class AuthenticationWindow : Form
{
// Most important log in information needs to be entered
// for encrypting and decrypting binary file.
AuthenticateUser authenticateUser;
public AuthenticationWindow()
{
InitializeComponent();
}
private void btnClose_Click(object sender, EventArgs e)
{
// Closing Authentication Window form.
Close();
}
private void btnClear_Click(object sender, EventArgs e)
{
// Clearing text boxes txtUserName and txtPassword
// after Clear Form button is clicked.
txtUserName.Clear();
txtPassword.Clear();
}
private void btnAuthenticate_Click(object sender, EventArgs e)
{
if (txtUserName.Text == string.Empty || txtPassword.Text == string.Empty)
{
MessageBox.Show("Please fill both information first.");
}
else
{
// Passing the values to object AuthenticateUser.
authenticateUser = new AuthenticateUser(txtUserName.Text, txtPassword.Text);
MessageBox.Show(authenticateUser.UserName + authenticateUser.Password);
Close();
}
}
}
}
问候。
答案 0 :(得分:1)
您正在创建两个AuthenticateUser
的单独实例,一个在AddEntryWindow
中,另一个在AuthenticationWindow
中。仅仅因为它们具有相同的名称并不意味着它们处于相同的scope
。
在不知道您的计划如何运作的情况下,我无法为您提供最佳选择,但可以创建一个static class
作为AuthenticateUser
的全局。另一个选择是弄清楚如何在Forms
之间传递信息。如果您从AuthenticationWindow
创建AddEntryWindow
,则可以在AuthenticateUser
中将AuthenticationWindow
的实例设置为公开,然后在窗口关闭之前访问dispose
它的。
答案 1 :(得分:1)
在这里,我可以为您的问题推断出一些解决方法,我希望它能够满足您的需求。
如果从AuthenticationWindow调用或启动AddWindowEntry表单,假设AuthenticationWindow是父表单,那么您已在此类中创建了AuthenticateUser对象。将此实例传递给子窗体,即AddWindowEntry,并在那里设置为局部变量。因此,当执行btnAddEntry_Click事件时,您可以在消息框中显示此局部变量内容。
答案 2 :(得分:1)
就像John说的那样,你需要按如下方式更改代码:
public partial class AddEntryWindow : Form
{
// Making authentication possible.
AuthenticateUser authenticateUser = new AuthenticateUser();
// Default constructor to initialize the form.
public AddEntryWindow()
{
InitializeComponent();
}
private void btnAddEntry_Click(object sender, EventArgs e)
{
new AuthenticationWindow(authenticateUser).ShowDialog();
MessageBox.Show(authenticateUser.UserName + authenticateUser.Password);
}
}
...
public partial class AuthenticationWindow : Form
{
// Most important log in information needs to be entered
// for encrypting and decrypting binary file.
AuthenticateUser authenticateUser;
public AuthenticationWindow(AuthenticateUser user)
{
InitializeComponent();
authenticateUser = user;
}
...
private void btnAuthenticate_Click(object sender, EventArgs e)
{
if (txtUserName.Text == string.Empty || txtPassword.Text == string.Empty)
{
MessageBox.Show("Please fill both information first.");
}
else
{
// Passing the values to object AuthenticateUser.
authenticateUser.UserName = txtUserName.Text;
authenticateUser.Password = txtPassword.Text;
MessageBox.Show(authenticateUser.UserName + authenticateUser.Password);
Close();
}
}
}