我正在使用c#语言并尝试使用OOP。
我正在尝试做一个注册页面。在注册窗口表单中,我将文本框中输入的所有值(姓、名、用户名等)发送给一个User类。
User user = new User();
user.FirstName = txtFirstName.Text;
所有的属性都是这样设置的。
一切都很好,但在提交后,我打开了一个新的发票和付款表单。于是我关闭了登记表,打开了付款表。在支付表单中,当我尝试访问之前存储在User类中的值时,我不能。对于字符串,所有属性重置为null,对于双精度,所有属性重置为0.00。
我试着不关闭注册表单,看看是否有效,但它仍然重置属性。我认为这与在支付类中创建新对象有关。
如何将注册表单中的属性存储到用户类中,然后从支付表单中访问这些属性?
这可能吗?
这里有一些选项供您在表单之间传递值。
显然,您使用的是User类的new实例,而不是对从表单数据初始化的对象的引用。这是一个传统的OOP错误。确保将该引用存储在某个地方,这样您就不会丢失对它的跟踪。在您自己的应用程序对象或主窗体中。甚至可以是静态变量,因为应该只有一个用户。
User user = new User();
user.FirstName = txtFirstName.Text;
请注意,它永远不能正确地使用该代码片段。user变量是一个局部变量
你可以这样写代码:
public static class UserData
{
public static string FirstName;
public static bool Register(string firstName)
{
bool success = false;
//probably db related code here
if (success)
{
FirstName = firstName;
return true;
}
return false;
}
}
从现在开始,您可以作为UserData访问用户属性。FirstName假设有1个用户。如果我误解了你的问题,并且会有超过1个用户,你应该采取不同的方法,可能在某个有意义的地方保持对列表的静态引用(即使在UserData实例类中作为静态字段),并在完成注册后将最后保存的UserData实例添加到列表中。这样你就可以从任何地方访问最后添加的对象,比如UserDataList[UserDataList]。计数- 1]。FirstName