diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/TabControl.cs b/src/System.Windows.Forms/src/System/Windows/Forms/TabControl.cs index 67b977bff87..2e4aca11f23 100644 --- a/src/System.Windows.Forms/src/System/Windows/Forms/TabControl.cs +++ b/src/System.Windows.Forms/src/System/Windows/Forms/TabControl.cs @@ -1970,7 +1970,14 @@ private bool WmSelChange() if (IsAccessibilityObjectCreated && SelectedTab?.ParentInternal is TabControl) { SelectedTab.TabAccessibilityObject.RaiseAutomationEvent(UiaCore.UIA.SelectionItem_ElementSelectedEventId); - BeginInvoke((MethodInvoker)(() => SelectedTab.TabAccessibilityObject.RaiseAutomationEvent(UiaCore.UIA.AutomationFocusChangedEventId))); + BeginInvoke((MethodInvoker)(() => + { + if (IsAccessibilityObjectCreated && SelectedTab?.ParentInternal is TabControl && + !SelectedTab.IsDisposed && SelectedTab.TabAccessibilityObject is not null) + { + SelectedTab.TabAccessibilityObject.RaiseAutomationEvent(UiaCore.UIA.AutomationFocusChangedEventId); + } + })); } } else diff --git a/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/TabControlTests.cs b/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/TabControlTests.cs index c3d1ba4eda4..8b32a1ea048 100644 --- a/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/TabControlTests.cs +++ b/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/TabControlTests.cs @@ -5704,6 +5704,40 @@ public void TabControl_Invokes_SetToolTip_IfExternalToolTipIsSet() Assert.Equal(text, actual); } + [WinFormsFact] + public void TabControl_WmSelChange_SelectedTabIsNull_DoesNotThrowException() + { + using Form form = new(); + using TabControl control = new(); + using TabPage page1 = new("text1"); + control.TabPages.Add(page1); + _ = control.AccessibilityObject; + + form.Controls.Add(control); + form.Show(); + control.SelectedIndex = 0; + + Action act = () => control.TestAccessor().Dynamic.WmSelChange(); + try + { + act(); + } + catch (Exception ex) + { + Assert.Fail($"Expected no exception, but got: {ex}"); + } + + control.TabPages.Clear(); + + var exception = Record.Exception(() => + { + Application.DoEvents(); + Thread.Sleep(100); + }); + + Assert.Null(exception); + } + private class SubTabPage : TabPage { }