Почему делает IDE Visual Studio, иногда инициализируют "this.components объект: и другие времена нет?

Чистое решение jQuery ($) будет выглядеть так:

  $('input[type="radio"]').on('change', function() {
     $(this).closest('td').attr("style", "background-color:" + $(this).val());
   });

или

$('input[type="radio"]').on('change', function() {
 $(this).closest('td').css("background-color", $(this).val());
});
13
задан Stuart Helwig 17 February 2009 в 04:24
поделиться

3 ответа

Это - восстанавливаемое поведение. При создании новой формы она начинается со скелетом, который включает this.components вызов конструктора. Когда Вы затем добавляете, компонент (скажите, что Таймер), и удаляют его снова, разработчик повторно создает код, теперь без вызова конструктора. Это не ошибка.

Fwiw, скелетный код сгенерирован Common7\IDE\ItemTemplates\CSharp\Windows Forms\1033\Form.zip\form.designer.cs

Наблюдение основы. Расположите () вызов в, если () оператор является ошибкой. Это могло бы быть самовызвано. Или это могла бы быть бета-версия скелетного кода. VS2005 делает его правильно. Действительно проверьте папку ItemsTemplatesCache.

4
ответ дан 2 December 2019 в 01:32
поделиться

Интересный незначительный сбой! Это действительно походит на ошибку в одной версии разработчика / шаблонная обработка. Конечно, если Вы думаете, что код разработчика вмешался, все ставки в значительной степени прочь так или иначе...

Однако в VS2008, это генерирует несомнительно правильную версию:

if (disposing && (components != null))
{
    components.Dispose();
}
base.Dispose(disposing);

Так основа Dispose(...) назван. Я не имею VS2005 удобный для тестирования его, к сожалению. Однако - это не инициализирует компоненты, пока это не имеет к - объявление:

private System.ComponentModel.IContainer components = null;

И затем если это необходимо, это заполняется в InitializeComponent:

private void InitializeComponent()
{
    this.components = new System.ComponentModel.Container();
    //...
}

Я предполагаю с этой конструкцией, которую это только должно поддержать InitializeComponent (а не поля самостоятельно).

1
ответ дан 2 December 2019 в 01:32
поделиться

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

Я думаю, что это - комбинация двух вещей:

  1. Немного отличающаяся генерация кода между версиями Visual Studio
  2. Расположить метод только сгенерирован, если нет того уже в файле, тогда как InitializeComponent (и связанные объявления) сгенерирован каждый раз

Это приводит к разделу InitializeComponent/declarations, который является в неисправном состоянии с Расположить методом.

0
ответ дан 2 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

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