[C#] Spaltenbreite eines PropertyGrids festlegen

  • SetPropertyGridColumnWidth() simuliert das Verstellen der Spaltenbreite mit der Maus
  • das PropertyGrid muss sichtbar sein (visible == true)
  • Funktionsaufruf funktioniert nicht im Form-Konstruktor, da dort das PropertyGrid noch nicht sichtbar ist
using System;
using System.Windows.Forms;
using System.Reflection;

// statt im Konstruktor die Breite einzustellen, lieber das Ereignis Shown()
// benutzen, da dies erst eintritt, nachdem die gesamte Form schon angezeigt wurde
private void Form1_Shown(object sender, EventArgs e)
{
    this.SetPropertyGridColumnWidth(PropertyGrid1, 100);
}

// Spaltenbreite eines Propertygrids setzen
private void SetPropertyGridColumnWidth(PropertyGrid grid, int width)
{
    if (grid != null)
    {
        FieldInfo fi = grid.GetType().GetField(@"gridView", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField);
        if (fi != null)
        {
            Control view = fi.GetValue(grid) as Control;
            if (view != null)
            {
                // Funktion "MoveSplitterTo" holen
                MethodInfo mi = view.GetType().GetMethod(@"MoveSplitterTo", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod);
                if (mi != null)
                {
                    // Funktion "MoveSplitterTo" ausführen
                    mi.Invoke(view, new object[] { width });
                }
            }
        }
    }
}