Расположение средств управления на Winforms

Почему Visual Studio добавляет этот код к Классу. Designer.cs частичный класс. Кто-либо может сказать мне, когда эта переменная компонентов собирается получить некоторое значение? За чем шаблон должен следовать здесь?

private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if(disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
7
задан jmayor 29 January 2010 в 15:58
поделиться

4 ответа

Частное поле компоненты используется для отслеживания одноразовых компонентов в вашей форме. Попробуйте перетаскивать в Timer Компонент , и вы должны увидеть что-то вроде этого в созданном дизайнере, сгенерированный код:

this.components = new System.ComponentModel.Container();
this.timer1 = new System.Windows.Forms.Timer(this.components);

. Шаблон, отображаемый в методе (Bool) , обычно называется методом как Одноразовый . В основном, что шаблон гарантирует, что все отслеживаемые компоненты будут расположены, даже если вы никогда не звоните методу метода метода, в этом случае базовый класс вашей формы позвонит Dispose Метод в его финаризаторе (во время сборки мусора).

5
ответ дан 6 December 2019 в 23:05
поделиться

Не все компоненты используют его, например, HelpProvider и EventLog. Вы можете даже комментировать это в этих случаях. Звучит, как Ms Bodge для меня.

0
ответ дан 6 December 2019 в 23:05
поделиться

Один общий режим операций состоит в том, что развернутое программное обеспечение живет в отдельной отрасли, которая получает только исправления. Где вы на самом деле развиваете эти исправления, в основном неактуальны; Чтобы избежать вмешательства в текущее развитие, имеет смысл разрабатывать исправление на вершине «живой» филиала, затем проверьте / комбинируйте / развернутые в живую систему, и Aftewards объединяет фиксацию обратно в багажник.

-121--2975502-

Компоненты присваиваются при добавлении не визуальных компонентов, которые также должны быть расположены в определении способа (для получения дополнительной информации, обратитесь к idisposable Pattern).

1
ответ дан 6 December 2019 в 23:05
поделиться

Это код, который создается шаблоном элемента формы (common7 \ ide \ itemtemplates \ csharp \ windows формы \ 1033 \ form.zip \ form.designer.cs).На самом деле в нем есть ошибка, содержащийся в нем метод InitializeComponent () без необходимости инициализирует переменную this.components. Вы можете безопасно удалить оператор из кода, если в вашей форме нет компонентов. Дизайнер автоматически вернет его обратно, если вы добавите компонент позже.

Еще одна неприятная вещь - это то, что метод Dispose () помещен в файл Designer.cs. Он действительно принадлежит файлу form.cs, поэтому вы можете добавлять вызовы Dispose () для полей в вашей форме, которые следует удалить. Не стесняйтесь перемещать код самостоятельно, изменение файла дизайнера таким образом не имеет неприятных побочных эффектов. Просто держитесь подальше от кода, заключенного в скобки с областью «сгенерированный код».

Как упоминалось в большинстве других ответов, этот код необходим для вызова метода Dispose () любых компонентов, которые вы сбросили в форму при закрытии формы. Элементы управления в форме также должны быть удалены, но это автоматически. Класс Form находит их, перебирая коллекцию Controls.

5
ответ дан 6 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: