C# 家庭作业如何将值从一个窗体传递到另一个窗体列表中的对象

C# 家庭作业如何将值从一个窗体传递到另一个窗体列表中的对象,c#,winforms,list,object,properties,C#,Winforms,List,Object,Properties,我有以下代码片段,允许我从列表中的对象中提取属性,并将它们分配给其他形式的变量。但是,我需要能够以另一种形式从变量中提取数据,并使用这些数据设置给定对象的属性 我的类帐户用于填充我的列表帐户。在我的下一个表单AccountMenu中,我有一个类Variables1,其中包含可访问的变量,这些变量在我的其余表单中用于跟踪检查余额和保存余额。从AccountMenu注销时,我希望能够将变量1中的值传递给最初使用的帐户 我知道如何将变量从一个表单传递到另一个表单,但我不确定如何在原始表单上自动更新表单

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

我的类帐户用于填充我的列表帐户。在我的下一个表单AccountMenu中,我有一个类Variables1,其中包含可访问的变量,这些变量在我的其余表单中用于跟踪检查余额和保存余额。从AccountMenu注销时,我希望能够将变量1中的值传递给最初使用的帐户

我知道如何将变量从一个表单传递到另一个表单,但我不确定如何在原始表单上自动更新表单,而不使用按钮。因此,我看到的解决方案是,我在AccountMenu表单上有一个按钮,可以通过这个.close()将用户“注销”;此外,我猜在该按钮下,我需要一些代码来将变量作为属性分配给对象。我只是不确定如何访问对象的集合属性,因为它是用下面的代码动态调用的

有人能帮我弄清楚我需要做什么吗?下面是一些相关的代码,您可以看到我是如何设置的。我只是不知道如何从另一个表单访问“匹配项”,以便更新特定的对象属性。谢谢你,任何能帮忙的人

    //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();
        }
    }
//将用于检查textbox1.Text的变量
字符串检查;
//类帐户数组
列表帐户=新列表();
公共主菜单()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
//将值设置为用户输入
stringToCheck=textBox1.Text;
//设置一个仅在.Name已存在时返回值的变量
var matches=accounts.FirstOrDefault(p=>p.Name==stringToCheck);
//检查数组的每个元素
if(匹配==null)
{
账户。添加(新账户(stringToCheck));
textBox1.Text=“”;
标签3.可见=真;
}
else if(匹配!=null)
{
//以另一种形式设置变量。不确定这些变量是否有效
Variables1.selectedAccount=matches.Name;
//这是在调用实例的CheckBalance吗?
Variables1.selectedCheckBalance=matches.CheckBalance;
//同样的事情?
Variables1.selectedSaveBalance=matches.SaveBalance;
//切换到表单
AccountMenu acctMenu=新建AccountMenu();
this.Hide();
acctMenu.Show();
}
}

根据我的理解,我认为您需要的是父窗体上的某种触发器,需要从子应用程序调用该触发器

如果这是您所需要的,那么您可以在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);
}
Accounts(帐户)窗口按钮1\u Click(单击)事件中所需的代码,此时Account(帐户)菜单将打开:

//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.
  }
}

谢谢你的回复。一切似乎都是有道理的,似乎都应该奏效。但是,我无法设置更新当前对象的代码。我试图使用以下代码,但“匹配”部分不会从一个按钮单击事件填充到另一个按钮单击事件:matches.CheckBalance=Variables1.selectedCheckBalance;matches.SaveBalance=Variables1.selectedSaveBalance;事实上,我让它工作了。我需要做的是使用另一个检查accounts列表的实例,但这次是针对Variables1.selectedAccount,如下所示:var updateAccount=Account.accounts.FirstOrDefault(p=>p.Name==Variables1.selectedAccount);之后,我只需要将matches.CheckBalance更改为updateAccount.CheckBalance,并对SaveBalance执行相同的操作。非常感谢你的帮助!