diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/Controls/TabControl/TabControl.cs b/src/System.Windows.Forms/src/System/Windows/Forms/Controls/TabControl/TabControl.cs index 618ce40bb14..a2b962ca701 100644 --- a/src/System.Windows.Forms/src/System/Windows/Forms/Controls/TabControl/TabControl.cs +++ b/src/System.Windows.Forms/src/System/Windows/Forms/Controls/TabControl/TabControl.cs @@ -1957,7 +1957,14 @@ private bool WmSelChange() if (IsAccessibilityObjectCreated && SelectedTab?.ParentInternal is TabControl) { SelectedTab.TabAccessibilityObject.RaiseAutomationEvent(UIA_EVENT_ID.UIA_SelectionItem_ElementSelectedEventId); - BeginInvoke((MethodInvoker)(() => SelectedTab.TabAccessibilityObject.RaiseAutomationEvent(UIA_EVENT_ID.UIA_AutomationFocusChangedEventId))); + BeginInvoke((MethodInvoker)(() => + { + if (IsAccessibilityObjectCreated && SelectedTab?.ParentInternal is TabControl && + !SelectedTab.IsDisposed && SelectedTab.TabAccessibilityObject is not null) + { + SelectedTab.TabAccessibilityObject.RaiseAutomationEvent(UIA_EVENT_ID.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 8e0ac90df96..f63eb17ed73 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 @@ -5703,6 +5703,33 @@ 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(); + act.Should().NotThrow(); + + control.TabPages.Clear(); + + var exception = Record.Exception(() => + { + Application.DoEvents(); + Thread.Sleep(100); + }); + + exception.Should().BeNull(); + } + private class SubTabPage : TabPage { }