作业如何将值从一种形式传递到另一种形式的列表中的对象

时间:2014-09-29 03:46:06

标签: c# winforms list object properties

我有以下代码片段,允许我从列表中的对象中提取属性,并将它们分配给其他形式的变量。但是,我需要能够从其他形式的变量中提取数据,并使用它们来设置给定对象的属性。

我的班级帐户用于填充我的列表帐户。在我的下一个表单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();
        }
    }

1 个答案:

答案 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.
  }
}