Я обновил проект Xcode 3, имеющий три цели, до Xcode 4. Пакеты моих целей больше не содержат файлов NIB - только файлы XIB. В новом проекте Xcode 4 есть и то, и другое (по крайней мере, в симуляторе). Я не вижу никакой разницы между настройками старого и нового проектов Xcode, чтобы учесть эту разницу. Я получаю класс от RichTextBox или Panel, перестраиваю свой проект, добавляя класс в панель инструментов конструктора VS, а затем перетаскиваю настраиваемый пользовательский элемент управления в форму. Все работает нормально, и я могу запустить свой проект ...
Проблема возникает, когда я редактирую свойства формы или настраиваемого пользовательского элемента управления через конструктор. Иногда разработчик удаляет строку инициализации из своего кода программной части, вызывая исключение в конструкторе и исполняемом файле, поскольку элемент управления остается неинициализированным.
Другими словами, следующая строка удаляется, скажем, из Form1.Designer.cs:
this.customRichTextBox1=new CustomRichTextBox();
Никакая другая строка не удаляется из кода программной части, поэтому атрибуты настраиваемого элемента управления все еще устанавливаются, хотя переменная остается неинициализированной.
Мое решение всегда заключалось в том, чтобы вручную инициализировать мой пользовательский элемент управления в коде конструктора - за, но дизайнер в конечном итоге удаляет его снова.
Я считаю, что этого не происходит, когда я создаю Custom UserControl через конструктор (но я не совсем уверен в этом). Это происходит только тогда, когда я определяю что-то вроде следующего вручную:
class CustomRichTextBox:RichTextBox{}
Это так раздражает. Что я делаю не так?
В соответствии с просьбой @Cody, вот шаги для воспроизведения проблемы. Я использую VS2010, но, как мне кажется, эта проблема у меня возникла с 2005 г.
Шаг 1. Создайте новое приложение Windows Forms, любую платформу
Шаг 2. Добавьте следующий класс ниже основного класса Form: (It Просто так случилось, что это элемент управления, который на этот раз вызывает у меня эту проблему.)
class CustomRichTextBox : RichTextBox
{
Timer tt = new Timer();
internal CustomRichTextBox()
{
tt.Tick += new EventHandler(tt_Tick);
tt.Interval = 200;
}
protected override void OnTextChanged(EventArgs e)
{
tt.Stop();
tt.Start();
}
void tt_Tick(object sender, EventArgs e)
{
System.Diagnostics.Trace.WriteLine("Hello world!");
}
}
Шаг 3. Нажмите F6, чтобы перестроить.
Шаг 4. Добавьте элемент управления CustomRichTextBox в форму, перетащив его из панели инструментов.
Шаг 5. Если хотите, вы можете нажать F5, чтобы протестировать приложение, но оно должно работать. Закройте работающее приложение.
Шаг 6. Нажмите F6, чтобы перестроить, и на этом этапе дизайнер должен вылететь со следующим сообщением: «Переменная customRichTextBox1 либо не объявлена, либо никогда не назначалась». (В одном случае произошел полный сбой всего VS, но ошибка обычно содержится в конструкторе.)
Шаг 7. Чтобы исправить проблему, войдите в программный код и инициализируйте переменную, но в следующий раз, когда вы перестроите, строка инициализации исчезнет.