我有以下代码片段,允许我从列表中的对象中提取属性,并将它们分配给其他形式的变量。但是,我需要能够从其他形式的变量中提取数据,并使用它们来设置给定对象的属性。
我的班级帐户用于填充我的列表帐户。在我的下一个表单AccountMenu上,我有一个类Variables1,它包含可访问的变量,这些变量在我的其余表单中使用,以跟踪检查余额和保存平衡。从AccountMenu注销时,我希望能够将Variables1中的值传递给最初使用的帐户。
我知道如何将变量从一个表单传递到另一个表单,但我不确定如何在原始表单上自动更新表单而不使用按钮。因此,我看到的解决方案是我的AccountMenu表单上有一个按钮,通过this.close();“记录”用户。另外,我猜想在那个按钮下,我需要有一些代码将变量指定为对象的属性。我只是不确定如何访问对象的set属性,因为它是使用下面的代码动态调用的。
有人可以帮我弄清楚我需要做什么吗?下面是一些相关代码,以便您了解我如何设置内容。我只是不确定如何从其他表单访问“匹配”以更新该特定对象属性。谢谢,任何人都可以提供帮助!
//variable that will be used to check textbox1.Text
string stringToCheck;
//array of class Account
List<Account> accounts = new List<Account>();
public MainMenu()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//set value to user's input
stringToCheck = textBox1.Text;
//set a var that only returns a value if the .Name already exists
var matches = accounts.FirstOrDefault(p => p.Name == stringToCheck);
//check through each element of the array
if (matches == null)
{
accounts.Add(new Account(stringToCheck));
textBox1.Text = "";
label3.Visible = true;
}
else if (matches != null)
{
//set variables in another form. not sure if these are working
Variables1.selectedAccount = matches.Name;
//is this calling the CheckBalance of the instance?
Variables1.selectedCheckBalance = matches.CheckBalance;
//same thing?
Variables1.selectedSaveBalance = matches.SaveBalance;
//switch to form
AccountMenu acctMenu = new AccountMenu();
this.Hide();
acctMenu.Show();
}
}
答案 0 :(得分:1)
根据我的理解,我认为您需要的是您的父表单上的触发器,需要从您的子应用程序调用。
如果这是您所需要的,那么您可以在AccountMenu表单上定义活动。并在“帐户”表单中注册此活动。
简单地从您的AccountMenu子表单中提升此事件。
Deletegates和事件真的像魔法一样:)
让我向您展示一些代码如何执行此操作。
AccountMenu窗口中需要的代码:
public delegate void PassDataToAccounts(string result);
public event PassDataToAccounts OnPassDataToAccount;
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
if (OnPassDataToAccount != null)
OnPassDataToAccount("result");
base.OnClosing(e);
}
“帐户”窗口中的代码button1_Click将打开AccountMenu的事件:
//set variables in another form. not sure if these are working
Variables1.selectedAccount = matches.Name;
//is this calling the CheckBalance of the instance?
Variables1.selectedCheckBalance = matches.CheckBalance;
//same thing?
Variables1.selectedSaveBalance = matches.SaveBalance;
//switch to form
AccountMenu acctMenu = new AccountMenu();
acctMenu..OnPassDataToAccount += childwindow_OnPassDataToAccount;
this.Hide();
acctMenu.Show();
}
void childwindow_OnPassDataToAccount(string result)
{
if (result == "result")
{
// Processing required on your parent window can be caried out here
//Variables1 can be processed directly here.
}
}