2014-09-29 93 views
0

我有以下代碼片段,它允許我從列表中的對象拉出屬性並將它們分配給其他形式的變量。但是,我需要能夠從其他形式的變量中提取數據並使用它們來設置給定對象的屬性。作業如何將值從一種形式傳遞給另一種形式的列表中的對象

我的班級帳戶用於填充我的列表帳戶。在我的下一個表單AccountMenu上,我有一個類Variables1,其中包含可用變量,這些變量在我的其他表單中用於跟蹤檢查餘額並節省餘額。從AccountMenu註銷時,我希望能夠將Variables1中的值傳遞給最初使用的帳戶。

我知道如何將變量從一種表單傳遞給另一種表單,但我不確定如何在原始表單上自動更新表單,而無需按鈕。因此,我看到的解決方案是我的AccountMenu表單上有一個按鈕,通過this.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(); 
     } 
    } 

回答

1

按我的理解,我想你需要的是你的父窗體上類型的觸發,需要從你的孩子應用程序調用。

如果這是您所需要的,那麼您可以在AccountMenu表單上定義事件。並從您的帳戶表單註冊此事件。

只是從您的AccountMenu子表單中引發此事件。

Deletegates和事件是真的就像魔術​​:)

讓我告訴你一些代碼是如何做到這一點。在AccountMenu窗口所需要

代碼:在帳戶窗口button1_Click事件需要

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); 
} 

代碼,其中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. 
    } 
} 
+0

謝謝你的答覆。一切似乎都有道理,似乎應該起作用。但是,我無法設置更新當前對象的代碼。我試圖使用下面的代碼,但「匹配」部分不會從一個button_Click事件填充到另一個:matches.CheckBalance = Variables1.selectedCheckBalance; matches.SaveBalance = Variables1.selectedSaveBalance; – 2014-09-29 05:31:48

+0

其實,我懂了。我需要做的是使用另一個檢查帳戶列表的實例,但這次是爲Variables1.selectedAccount,如下所示:var updateAccount = Account.accounts.FirstOrDefault(p => p.Name == Variables1.selectedAccount);之後,我只需要將matches.CheckBalance更改爲updateAccount.CheckBalance,併爲SaveBalance執行相同操作。非常感謝你的幫助! – 2014-09-29 05:49:30

相關問題