Попытка внести изменения в две разные дочерние формы из основной формы с помощью пользовательских событий
У меня есть три формы:
Основная форма - Содержит коллекцию списков, созданную внутри, и две кнопки, где создаются экземпляры QuestionForm и ListViewForm.
public static List<Items> listOfItems = new List<Items>(); public List<Items> ItemList { get { return listOfItems; } set { listOfItems = value; } } private void displayListViewToolStripMenuItem_Click(object sender, EventArgs e) { ListViewForm lvf = new ListViewForm(); lvf.Show(); } private void newQuestioFormButton_Click(object sender, EventArgs e) { QuestionForm qf = new QuestionForm(); qf.Show(); //Adds new item created to listOfItems qf.ObjectCreatedToList += ObjectCreatedToListCollectionHandler; }
QuestionForm - Содержит элементы управления для ввода пользователем значений, эти значения хранятся внутри переменной-члена класса, которая создается как объект и затем добавляется в коллекцию списков в основной форме
public EventHandler ObjectCreatedToList; //Class Property that assigns values to member variables public Items Info { get { //Instantiates new Team class, assigns member variables to control values and returns new Team object } set { //set control values to Team member variables } } private void addItemToolStripButton_Click(object sender, EventArgs e) { if(ObjectCreatedToList != null) { ObjectCreatedToList(this, new EventArgs()); } //Some Validation here to prevent control values to reset //If all control values are entered, this will clear the controls Info = new Items(); }
ListViewForm - Содержит ListView, где при добавлении элементов в коллекцию списков в форме QuestionForm они также должны быть добавлены в элемент управления listview
Проблема, с которой я сталкиваюсь, заключается в том, что при открытии всех трех форм элемент управления listview внутри формы ListViewForm должен обновляться по мере создания новых объектов формой QuestionForm.
Поскольку эти две формы создаются внутри другой кнопки в основной форме, я не могу понять, как добавить элементы внутри элемента управления listview без того, чтобы он не попал в метод или не выдал мне ошибку.
Что я уже пробовал:
Я пробовал что-то похожее на это:
QuestionForm
public EventHandler ItemAlsoAddedToListViewChange; private void addItemToolStripButton_Click(object sender, EventArgs e) { if(ObjectCreatedToList != null) { ObjectCreatedToList(this, new EventArgs()); } if(ItemAlsoAddedToListViewChange != null) { ItemAlsoAddedToListViewChange(this, new EventArgs()); } //Some Validation here to prevent control values to reset //If all control values are entered, this will clear the controls Info = new Items(); }
ListViewForm
public void UpdateListViewHandler(object sender, EventArgs e) { MainForm mf = sender as MainForm; forech(Items itm in mf.ItemList) { ListViewItem lvi = new ListViewItem(); lvi.Text = itm.IconName; lvi.ImageIndex = itm.ItemIconIndex; lvi.Tag = itm; itemListViewControl.Items.Add(displayIcon); }
Основная форма
private void displayListViewToolStripMenuItem_Click(object sender, EventArgs e) { ListViewForm lvf = new ListViewForm(); QuestionForm qf = sender as QuestionForm(); gf.ItemAlsoAddedToListViewChange += UpdateListViewHandler; lvf.Show(); }
Но это дало мне исключение ArgumentNullException.
Кто-нибудь может помочь? И уточните, что я делаю не так? Спасибо.