为什么我不能在c#中设置或更改其他表单中的属性

时间:2018-05-20 20:28:45

标签: c# winforms

我有3种形式:

一种登录表单:

LoginForm

一个创建帐户表单:

Create Account Form

和一个软件表单,您可以成功登录。然而,那个与我的情况无关。现在,有一个类看起来像这样:

Classaccounts

我用get;组;所以我可以从帐户创建者表单中获取值。

这是帐户创建者表单的代码:

code accountcreator

所以我的问题是,为什么这不会改变Class Accounts.cs中属性的值?

2 个答案:

答案 0 :(得分:0)

帐户用户对象是在表单创建帐户中创建的。

您需要将值传递给另一个表单或使用静态变量。

Here explains how to create a static variable and how to pass object to another Form

答案 1 :(得分:0)

问题是"为什么这不会改变Class Accounts.cs中属性的值?" 。发布的代码更改该类实例的3个属性中的2个。如果您没有看到,那么您必须查看该类的其他实例。以下是从对话框外部获取对话框中输入的信息所能做的...

accounts类重命名为Account,因为每个实例仅代表一个帐户,并且通常会将类名称大写。

在帐户创建者表单上,将user的声明更改为公共财产:

public Account user { get; } = new Account();

这使您可以从使用表单的位置访问它。所以你可能会有一些代码:

var form=new CreateAccountForm();
form.ShowDialog();

您现在可以使用form.user访问该表单上Account类实例的内容。

但是,您需要知道他们是按下按钮还是只是关闭了对话框。因此,请在this.DialogResult=DialogResult.OK;行之后设置string email=

string email=应替换为user.email=

this.Hide();应为this.Close();

然后调用代码可以变为:

var form=new CreateAccountForm();
if (form.ShowDialog()==DialogResult.OK)
{
    // Do something with form.user here.
}

当然,任何表格都是一次性的,因此form的声明应该在using块中完成。

免责声明:所有这些都是从我的电脑上写下来的。