Я создал форму с элементом управления с вкладками, который динамически добавляет пользовательские элементы управления на каждую вкладку, а также StatusStrip в нижней части формы. Когда приложение запускается, пользовательские элементы управления загружаются на вкладках в зависимости от безопасности, при этом загружается как минимум 1 вкладка. На StatusStrip два ToolStripComboBox, 2 ToolStripButtons, 1 ToolStripLabel и 1 ToolStripStatusLabel. Все отлично загружается и работает.
Меня попросили открыть всплывающее окно MonthCalendar, когда пользователь нажимает одну из двух кнопок. Вот код, который я использую для этого:
If IsNothing(theCal) Then
theCal = New MonthCalendar
AddHandler theCal.DateSelected, AddressOf theCalDateSelected
AddHandler theCal.LostFocus, AddressOf theCalLostFocus
AddHandler theCal.GotFocus, AddressOf theCalLostFocus
theCal.Parent = Me
theCal.Top = StatusStripMain.Top - theCal.Height
theCal.Left = ComboBoxAvailableLegDay.Bounds.X
theCal.Anchor = AnchorStyles.Bottom + AnchorStyles.Left
theCal.Show()
theCal.BringToFront()
theCal.Focus()
Else
Me.Controls.Remove(theCal)
theCal = Nothing
End If
theCal определяется как Protected в верхней части класса формы. Таким образом, нажатие кнопки создаст MonthCalendar и правильно расположит его, если он не существует, а если он существует, то он будет удален. Это работает без проблем.
Моя проблема в том, что theCal никогда не запускает GotFocus или LostFocus. У меня есть процедура theCalLostFocus, определенная следующим образом, и она никогда не генерирует исключение. Я могу поставить точку останова в броске, и код никогда не дойдет до этой точки.
Private Sub theCalLostFocus(ByVal sender As Object, ByVal e As EventArgs)
Throw New NotImplementedException
End Sub
Щелчок даты в Cal вызовет процедуру CalDateSelected, но щелчок в любой другой области формы не запускает CallLostFocus. Поскольку пользователь может захотеть не выбирать дату, и я не хочу заставлять их нажимать кнопку, чтобы удалить Cal, я хотел бы иметь возможность удалить Cal, когда он теряет фокус. Кто-нибудь знает, почему это происходит, и у кого-нибудь есть решение?
Спасибо. -NCGrimbo