Category / Section
How to determine which child control in the SfCalendar control has focus?
2 mins read
SfCalendar control is a combination of different controls like CalendarGrid, None and Today Button’s. The end user can navigate between its sub-controls using the Tab key, and it will be helpful for the end user if there is an option to know which part of the SfCalendar control is currently focused. The ActiveControl option available in Form can be helpful in this case.
The following code demonstrates the same.
Code Example: [C#]
/// <summary> /// Occurs when the Form is load /// </summary> private void Form1_Load(object sender, EventArgs e) { // To display Footer part of SfCalendar this.sfCalendar.ShowFooter = true; this.KeyPreview = true; this.KeyUp += Form1_KeyUp; } /// <summary> /// Invoked when Key up /// </summary> private void Form1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Tab) { UpdateActiveControl(); } } /// <summary> /// To update Active / Focused control in SfCalendar /// </summary> private void UpdateActiveControl() { if (this.ActiveControl != null && this.ActiveControl.ContainsFocus) { if (this.ActiveControl.Text == "None") { MessageBox.Show("None Button", "Focused Control"); } else if (this.ActiveControl.Text == "Today") { MessageBox.Show("Today Button", "Focused Control"); } else if (this.ActiveControl is Syncfusion.WinForms.Input.SfCalendar) { MessageBox.Show("SfCalendar", "Focused Control"); } } }
Code Example: [VB]
''' <summary> ''' Occurs when the Form is load ''' </summary> Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load ' To display Footer part of SfCalendar Me.sfCalendar.ShowFooter = True Me.KeyPreview = True AddHandler Me.KeyUp, AddressOf Form1_KeyUp End Sub ''' <summary> ''' Invoked when Key up ''' </summary> Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As KeyEventArgs) If e.KeyData = Keys.Tab Then UpdateActiveControl() End If End Sub ''' <summary> ''' To update Active / Focused control in SfCalendar ''' </summary> Private Sub UpdateActiveControl() If Me.ActiveControl IsNot Nothing AndAlso Me.ActiveControl.ContainsFocus Then If Me.ActiveControl.Text = "None" Then MessageBox.Show("None Button", "Focused Control") ElseIf Me.ActiveControl.Text = "Today" Then MessageBox.Show("Today Button", "Focused Control") ElseIf TypeOf Me.ActiveControl Is Syncfusion.WinForms.Input.SfCalendar Then MessageBox.Show("SfCalendar", "Focused Control") End If End If End Sub
Screenshot:
Sample
C#: SfCalendar_C#
VB: SfCalendar_VB