Skip to content

PropertyGrid randomly loses toolbar items #9223

@RussKie

Description

@RussKie

.NET version

Microsoft.WindowsDesktop.App 6.0.16

Did it work in .NET Framework?

Yes

Did it work in any of the earlier releases of .NET Core or .NET 5+?

No idea

Issue description

I have an app with a PropertyGrid control, which is customised with few extra buttons.
image

I observed that the custom buttons randomly disappear. Here's the trace of the issue:

 	DarcUI.dll!DarcUI.ExtendedPropertyGrid.ToolStripButton2.OnParentChanged(System.Windows.Forms.ToolStrip oldParent = {System.Windows.Forms.PropertyGridToolStrip}, System.Windows.Forms.ToolStrip newParent = null) Line 29	C#
>	System.Windows.Forms.dll!System.Windows.Forms.ToolStripItem.SetOwner(System.Windows.Forms.ToolStrip newOwner) Line 3910	C#
 	System.Windows.Forms.dll!System.Windows.Forms.ToolStripItemCollection.OnAfterRemove(System.Windows.Forms.ToolStripItem item = {DarcUI.ExtendedPropertyGrid.ToolStripButton2}) Line 443	C#
 	System.Windows.Forms.dll!System.Windows.Forms.ToolStripItemCollection.Clear() Line 225	C#
 	System.Windows.Forms.dll!System.Windows.Forms.PropertyGrid.SetupToolbar(bool fullRebuild) Line 4302	C#
 	System.Windows.Forms.dll!System.Windows.Forms.PropertyGrid.OnSystemColorsChanged(System.EventArgs e = {System.EventArgs}) Line 4508	C#
 	System.Windows.Forms.dll!System.Windows.Forms.Control.OnSystemColorsChanged(System.EventArgs e = {System.EventArgs}) Line 11230	C#
 	System.Windows.Forms.dll!System.Windows.Forms.Control.OnSystemColorsChanged(System.EventArgs e = {System.EventArgs}) Line 11230	C#
 	System.Windows.Forms.dll!System.Windows.Forms.Control.OnSystemColorsChanged(System.EventArgs e = {System.EventArgs}) Line 11230	C#
 	System.Windows.Forms.dll!System.Windows.Forms.Control.OnSystemColorsChanged(System.EventArgs e = {System.EventArgs}) Line 11230	C#
 	System.Windows.Forms.dll!System.Windows.Forms.Control.UserPreferenceChanged(object sender, Microsoft.Win32.UserPreferenceChangedEventArgs pref) Line 13440	C#

The issue appears to be here:

_toolStrip.Items.Clear();
for (int j = 0; j < buttonList.Count; j++)
{
_toolStrip.Items.Add(buttonList[j]);
}

The buttonList is rebuilt from only pre-defined elements, completely ignoring any additional elements the toolstrip contained.

Steps to reproduce

I can craft a sample, if necessary.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions