Происходит, когда класс пытается use
несколько Черты , где две или более из этих признаков имеют , определяют свойство с тем же именем и с свойством, имеющим разные начальные значения.
Пример:
Проблемное: хотя можно разрешить конфликты между конкурирующими методами , в настоящее время нет синтаксиса, который бы разрешил конфликт между двумя конкурирующими свойствами. Единственное решение в это время - refactor ; т.е. избежать конфликта между именами свойств, которые приводят к фатальной ошибке.
Вопросы, относящиеся:
Избегайте использования MessageBox. Покажите () для отладки этого. Это качает цикл сообщения, нарушая нормальный поток событий. событие Load инициировано Windows, отправляющим сообщение WM_SHOWWINDOW, непосредственно перед тем, как окно становится видимым. Нет никакого уведомления о Windows для "Вашего окна, теперь полностью показан", таким образом, разработчики WF придумали прием для генерации событие Shown . Они используют Управление. BeginInvoke (), гарантируя OnShown () метод называют, как только программа идет неактивная снова и повторно вводит цикл сообщения.
Этот прием имеет большое другое использование, особенно когда необходимо задержать выполнение кода, запущенного событием. Однако в Вашем случае это разваливается, потому что Вы используете MessageBox. Покажите (). Его цикл сообщения диспетчеризирует делегата, зарегистрированного в BeginInvoke (), заставляя событие Shown работать прежде , окно показывают.
существует много других способов получить диагностику вне MessageBox. Отладка. Печать () и Консоль. WriteLine () удобны, их вывод переходит в Окно вывода Visual Studio , не имея никаких неблагоприятных эффектов на нормальную последовательность увольнения события. Простое точка останова может сделать чудеса также.
Shown
событие имеет место после Load
событие. Основное различие не находится в видимость из формы, а в состояние (ширина, высота, и т.д.).
Для разъяснения вот пример. Рассмотрите форму, которая имеет размер по умолчанию 100, 200
и WindowState
, который является Maximized
. В Load
обработчик событий, размер будет 100, 200
. Но в Shown
обработчик событий, размер будет Вашим размер экрана .
Хорошо, я думаю, что разработал то, что действительно продолжается теперь, и куда мой беспорядок прибывал из (хотя не , почему он ведет себя тот путь). Похоже, что событие Shown на самом деле имеет место внутренний событие Load.
, Учитывая этот код:
protected override OnLoad(EventArgs e)
{
MessageBox.Show("Enter Load");
base.OnLoad(e);
MessageBox.Show("Exit Load");
}
protected override OnShown(EventArgs e)
{
MessageBox.Show("Enter Shown");
base.OnShown(e);
MessageBox.Show("Exit Shown");
}
тогда сообщения показывают в этом порядке:
, Свойство видимости Верно во всех четырех случаях все же в , ни один из этих случаев не является формой, на самом деле видимой на (нарисованном) экране.
действительно странная вещь, хотя то, что, если я комментирую "Загрузку Выхода" messagebox тогда, форма делает , появляются на экране , прежде чем "Войдут, Показанное" сообщение появляется. Это, кажется, код, выполненный после основного вызова OnLoad, против которого это действительно возражает так или иначе.
одной вещью, которую я знаю наверняка, является показанное событие, выполняется после того, как все на InitializeComponent сделано, и форма обнаруживается и именно в показанном, что необходимо поместить код, перемещаются, объект на форме на основе местоположения другого объекта
делают быстрый тест с пустым проектом:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MsgBox("load") 'form is still visible = false
End Sub
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
MsgBox("shown") ' form is now visible = true
End Sub
End Class
Я просто проверил и огни загрузки, прежде чем Показали, как это должно.
в Вашем подходе существует, очевидно, что-то не так.
Вот последовательность событий, которые я отслеживал. Возможно, это поможет другим решить, как они хотели бы вызывать или настраивать собственную обработку событий
Отслеживаемые события
Форма - Размер клиента изменен: 14.08.2010 10:40:28
Форма - Управление добавлено - button1: 14.08.2010 10:40:29
Форма - Конструктор: 14.08.2010 10:40:29
Форма - дескриптор создан: 14.08.2010 10:40:29
Форма - недействительна: 14.08.2010 10:40:29
Форма - событие загрузки формы: 14.08.2010 10:40:29
Форма - загружена: 14.08.2010 10:40:29
Форма - Создание элемента управления: 14.08.2010 10:40:29
Форма - Активирована: 14.08.2010 10:40:29
Форма - Показано: 14.08.2010 10:40:29
Форма - OnPaint: 14.08.2010 10:40:29
Форма - недействительна: 14.08.2010 10:40:29
Форма - OnPaint: 14.08.2010 10:40:29