Лучшее место для создания окон формы объектов - PullRequest
1 голос
/ 13 мая 2010

Я создаю приложение для Windows в C # 2008, которое будет иметь около 8-10 диалоговых окон. Я хочу, чтобы эти формы существовали на протяжении всей жизни программы. Где лучшее место для создания и хранения объектов?

Я приехал из Delphi, где объекты Form обычно хранились в глобальных переменных.

Я испытываю желание сделать это в статическом классе Program. Должен ли я поместить их в основную форму вместо?

Спасибо за помощь новичку в C #.

Ответы [ 3 ]

4 голосов
/ 13 мая 2010

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

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

1 голос
/ 13 мая 2010

Формы - это дорогие объекты, у них много внутреннего состояния. Кэширование имеет смысл, если создание данных стоит дорого. Формы ведут себя с точностью до наоборот, создание их данных обходится дешево. Использование кэшированных данных становится дорогим, когда Windows выгружает данные в файл подкачки. Что очень вероятно случится в вашем случае, диалоги не будут использоваться очень часто. На самом деле для отображения диалога требуется больше .

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

0 голосов
/ 13 мая 2010

Как правило, нет причин хранить диалоги для повторного использования. Типичный сценарий:

using( MyDialog dlg = new MyDialog() ) {
    dlg.MyTextProperty = "Are you realy sure, you want do XY operation?";
    dlg.MyNumberProperty = 15;

    DialogResult rslt = dlg.ShowDialog( this ); // the "this" is current form or control
    if ( rslt == DialogResult.OK ) {
        object userInput = dlg.UserInput;
        // do what you want with user input
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...