2014-09-29 2 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:

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. 
    } 
} 
+0

Спасибо за ответ. Кажется, что все имеет смысл и кажется, что оно должно работать. Однако я не могу установить код для обновления текущего объекта. Я пытаюсь использовать следующий код, но часть «matches» не будет заполняться из одного события button_Click в другое: matches.CheckBalance = Variables1.selectedCheckBalance; matches.SaveBalance = Variables1.selectedSaveBalance; –

+0

На самом деле, я получил его работу. Мне нужно было использовать другой экземпляр проверки списка учетных записей, но на этот раз для Variables1.selectedAccount, например: var updateAccount = Account.accounts.FirstOrDefault (p => p.Name == Variables1.selectedAccount); После этого мне просто нужно было изменить match.CheckBalance для updateAccount.CheckBalance и сделать то же самое для SaveBalance. Большое спасибо за помощь! –

Смежные вопросы