我創建了一個具有選項卡式控件的表單,可以將用戶控件動態添加到每個選項卡,並在表單底部添加一個StatusStrip。當應用程序啓動時,基於安全性將用戶控件加載到選項卡中,並加載至少1個選項卡。在StatusStrip上,兩個ToolStripComboBoxes,兩個ToolStripButtons,一個ToolStripLabel和一個ToolStripStatusLabel。一切都很好,工作。VB.Net:動態創建MonthCalendar不會觸發LostFocus或GotFocus
當用戶按下兩個按鈕之一時,我已經獲得了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
截至窗體類的頂部保護腱鞘定義。因此,按下按鈕將創建MonthCalendar並將其正確放置,如果它不存在,並且它確實存在,則將其刪除。這工作沒有問題。
我的問題是,卡爾永遠不會激發GotFocus或LostFocus。我已經獲得了過程theCalLostFocus定義如下,它從不會拋出異常。我可以在投擲中放置一個斷點,並且代碼永遠不會達到這一點。
Private Sub theCalLostFocus(ByVal sender As Object, ByVal e As EventArgs)
Throw New NotImplementedException
End Sub
點擊腱鞘的日期將調用theCalDateSelected程序,但點擊形式的其他區域不火theCalLostFocus。由於用戶可能不想選擇一個日期,我不想強迫他們不得不按下按鈕來刪除該日期,我希望能夠在失去焦點時移除日期。任何人都知道爲什麼會發生這種情況,任何人都有解決方案?
謝謝。 -NCGrimbo
我將AddHandler語句移到了Cal.Show()之後的行中,並且沒有發現行爲上的變化。 (並且我添加了刪除事件處理程序的每個註釋。) – NCGrimbo
我只注意到(Got/Lost)焦點事件處理程序的簽名不正確。它應該是一個路由事件:(ByVal sender As Object,ByVal e As RoutedEventArgs) – GameAlchemist
當我調用RoutedEventArgs時,出現錯誤:鍵入'RoutedEventArgs'未定義。 – NCGrimbo