Category / Section
How to determine which child control in the SfCalendar control has focus?
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