Рейтинг:
6
OriginalGriff
Не делай этого так.
Идея usercontrols заключается в том, что они являются автономными объектами, они не должны знать друг о друге (или даже о каком-либо родителе). Вместо этого они взаимодействуют с родительским контейнером (вашей формой) через события и свойства точно так же, как вы это делаете с отдельными формами.
Ваша форма создает первый элемент управления usercontrol и обрабатывает событие. Когда пользовательский элемент управления вызывает событие, он удаляет исходный элемент управления UserControl, и добавляет новый, обработке события от этого. Это звучит сложно, но на практике это не так - это именно то, что вы делали со всеми другими элементами управления, даже со своим .Чистые!
Вы можете посмотреть здесь: Передача информации между двумя формами, Часть 3: Ребенок ребенку[^] - он основан на форме, но это точно такой же процесс (и даже почти такой же код!) для объектов UserControl.
Member 14063275
Спасибо за ваш ответ. Я прошел через это, но я не понимаю этой логики.
OriginalGriff
Какой кусочек? Это же базовая техника упс!
Member 14063275
Извините меня за недостаток знаний, так как я новичок в c#. Я не понял "дочернее событие формы" и "родитель затем передает информацию в обработчике событий" разделов этой статьи.
OriginalGriff
ОК. Простите меня заранее, если я говорю через вашу голову или учу вашу бабушку сосать яйца - я не знаю, что вы делаете, и не знаю, и я не могу видеть, когда ваши глаза начинают стекленеть! Так что, если я выше твоего понимания, скажи мне, и то же самое, если ты научился этому давным-давно, хорошо?
Что вы знаете о событиях?
Вы знаете, что вся система основана на них, да? Когда вы нажимаете кнопку, она вызывает событие, и это приводит к выполнению любого обработчика.
Таким образом, в вашей дочерней форме (или usercontrol) вы создаете событие - код для этого довольно прост:
https://www.codeproject.com/Articles/400287/A-simple-code-snippet-to-add-an-event
Показывает код и простой способ добавить его в VS таким же образом, как вы набираете вкладку "prop" TAB для создания шаблона свойств.
Когда вы создаете usercontrol в ответ на кнопку, Вы можете добавлять события в экземпляр элемента управления - вы это знаете, верно?
Member 14063275
Спасибо, что нашли время все мне объяснить. Да, я знаю, что кнопка вызывает событие onclick. Таким образом, в моем втором пользовательском элементе управления у меня должно быть событие типа "public event EventHandler AddIncome; "плюс виртуальный метод, связанный с ним?
OriginalGriff
Зависит от того - трудно быть точным, не имея возможности видеть ваш экран - идея заключается в том, что один пользовательский элемент управления не должен знать о другом или даже о его контейнере. Это не зависит от UserControl, чтобы решить, что происходит, он просто говорит своему контейнеру, что "пользователь сделал это".
Таким образом, IncomeUC вызывает событие, когда пользователь нажимает кнопку AddIncome, а содержащая его форма обрабатывает это событие и решает, что произойдет. Она закрывает элемент управления UserControl, создает второй, и показывает, что.
Таким образом, только те элементы, которые должны знать о классах, имеют к ним какое - то отношение-форма добавляет UserControls, поэтому она должна знать, но сами элементы управления полностью независимы и вообще не знают о внешнем мире. Это часть того, что такое Упс!
В этом есть смысл?
Member 14063275
Да, теперь я понял это немного лучше. Я попробую это сделать. Спасибо.
OriginalGriff
Всегда пожалуйста!
Звучит сложно, но это действительно легко, когда вы получаете вашу голову вокруг него.
BillWoodruff
+5 Еще один отличный пример одного из лучших QA-ответчиков CodeProject ... иду на такое расстояние !
@originallgriff : как вы думаете, было бы добавить к этой теме, чтобы показать другую технику, использующую статический класс switchboard для обработки переходов пользовательского интерфейса ?
OriginalGriff
Вы могли бы - но я думаю, что он немного слишком много на стороне новичка вещей на этой стадии!