Передача объекта из формы в форму - PullRequest
0 голосов
/ 23 апреля 2009

У меня довольно большое приложение CRUD winform, которое настроено на отображение форм, встроенных в tabcontrols. Я хочу иметь объекты для Персона, (имеет) Зачисление, (имеет) План, который хранит и отслеживает информацию при взаимодействии с формами. Как мне это сделать? Я нашел предложение объявить объект Person в моем Program.cs , как это так ->

internal static class Program
{
    public static CurrentPerson _CurrentPerson;

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    private static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new FrmWWCShell());
    }
}

и затем на Search.cs ->

 Program._CurrentPerson = new CurrentPerson
                                     {
                                         PersonID = Convert.ToInt32(pID),
                                         LastName = lName,
                                         FirstName = fName,
                                         SocialSn = sSN,
                                         MiddleName = mName,
                                         BirthDate = Convert.ToDateTime(bDate)
                                     };

Это лучший способ? По-прежнему существует набор данных, которые необходимо заполнить из базы данных после того, как они сделали этот выбор на странице поиска. Как насчет объявления объекта в каждой форме и передачи его некоторым способом? Объект медленно «строится» по мере их продвижения. Сначала они ищут кого-то по имени и выбирают, с кем они будут работать. Тогда они могут работать с там зачислениями. После выбора регистрации они смогут взаимодействовать с этими планами.

Я был бы признателен за любые указания здесь, поскольку из-за всего этого моя неопытная голова кружилась ...

Ответы [ 3 ]

2 голосов
/ 23 апреля 2009

Вам потребуется разделить ваши данные, логику и графический интерфейс.

Посмотрите на шаблон Модель-Вид-Контроллер .

Если вы считаете, что в вашем случае это слишком сложно, вы можете просто создать класс центрального контроллера для хранения центральных данных. Передайте этот объект в каждый конструктор формы, и все готово.

0 голосов
/ 23 апреля 2009

Взгляните на шаблон проектирования Mediator .

0 голосов
/ 23 апреля 2009

а) Синглтон

Глобальное статическое свойство не очень хорошая идея с точки зрения повторного использования кода. Если вы планируете получить доступ к глобальному статическому свойству из всего своего кода, вы делаете свой код довольно привязанным к этому конкретному приложению.

Если в вашем коде всегда был только один экземпляр Person, то вы можете поместить этот синглтон в класс Person, но, конечно, не в свой класс Program. Однако обратите внимание, что использование классов Singleton обычно ограничивается службой ведения журналов или чем-то настолько распространенным, что оно, безусловно, никогда не изменится.

b) Одинаковая ссылка на объект

В этом случае вам не нужен одноэлементный экземпляр, а скорее передать такую ​​же ссылку в ваш объект данных (Person или что-то еще) в каждую форму , которая доступ к нему. Если ваша форма является представлением части ваших данных, вы можете передавать в форму только эту часть данных, предпочтительно через простейший интерфейс.

Для изменения данных в одной форме, вероятно, потребуется обновить другие формы. Это то, что Model-View-Controller и аналогичные шаблоны помогают вам выполнить - уведомление о том, что данные были изменены где-то еще .

Например, реализуя интерфейс IPropertyNameChanged в своем классе Person, вы можете уведомлять всех заинтересованных лиц (любую форму) о каждом изменении свойства. Проверьте это для примера: http://msdn.microsoft.com/en-us/library/ms229614.aspx. Прикрепив обработчик событий к этому событию в каждой форме, вы уведомите их всех о том, что они должны быть признаны недействительными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...