A special use case, that might be useful for someone:
I'm using PropertyGrid with a DesignSurface and label column width is narrowing by every value edit. To keep the label column width as the user has set it before the following worked for me:
public UcPropertyGridHost(...)
{
...
propGrid.PropertyValueChanged += OnPropertyValueChanged;
}
private void OnPropertyValueChanged(object p_s, PropertyValueChangedEventArgs p_e)
{
var iWidth = GetLastLabelWidth();
//do other things you want to
SetLabelColumnWidth(propGrid, (int)iWidth);
}
private int GetLastLabelWidth()
{
var iDefaultLabelColumnWidth = propGrid.Width / 2;
var oFieldInfo = propGrid.GetType().GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic);
if (oFieldInfo == null) return iDefaultLabelColumnWidth;
if (!(oFieldInfo.GetValue(propGrid) is Control oView)) return iDefaultLabelColumnWidth;
var oFileInfo = oView.GetType().GetField("labelWidth", BindingFlags.Instance | BindingFlags.NonPublic);
if (oFileInfo == null) return iDefaultLabelColumnWidth;
return (int)oFileInfo.GetValue(oView);
}
and the code taken from here:
private void SetLabelColumnWidth(PropertyGrid p_oGrid, int p_iWidth)
{
if (p_oGrid == null) return;
var oFieldInfo = p_oGrid.GetType().GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic);
if (oFieldInfo == null) return;
if (!(oFieldInfo.GetValue(p_oGrid) is Control oView)) return;
var oMethodInfo = oView.GetType().GetMethod("MoveSplitterTo", BindingFlags.Instance | BindingFlags.NonPublic);
if (oMethodInfo == null) return;
oMethodInfo.Invoke(oView, new object[] { p_iWidth });
}