PropertyGrid zur Laufzeit enablen/disenablen

27/05/2010 - 22:17 von Jakob Brunner, Switzerland | Report spam
Hallo
Ich möchte programmgesteuert, also zur Laufzeit, einzelne Elemente des
PropertyGrids enablen bzw. disenablen können.
Kann mir jemand sagen, wie man dies tun könnte?

Danke & Gruss
Jakob
Jakob Brunner
Luzern, Switzerland
 

Lesen sie die antworten

#1 Frank Dzaebel
27/05/2010 - 23:17 | Warnen spam
Hallo Jakob,

Ich möchte programmgesteuert, also zur Laufzeit, einzelne
Elemente des PropertyGrids enablen bzw. disenablen können.
Kann mir jemand sagen, wie man dies tun könnte?



'Out of the box' stellt das das PropertyGrid nicht
zur Verfügung.
Wie immer mit der Warnung, dass das private
Variablen sind, eine mögliche Lösung:

Aufruf:
PropertyGridUtility.EigenschaftsAttributÄndern(
(PropertyGrid)propertyGridEinstellungen,
"NameDeinerEigenschaft",
typeof(ReadOnlyAttribute), false, "isReadOnly");

public static void EigenschaftsAttributÄndern(PropertyGrid grid, string
displayName,
Type attributeType, object wertDesAttributes, string
privaterEigenschaftsName)
{
try
{
object gridView = typeof(PropertyGrid).InvokeMember("gridView",
BindingFlags.GetField | BindingFlags.NonPublic |
BindingFlags.Instance, null, grid, null);
GridItemCollection allGridEntries = (GridItemCollection)gridView.GetType(
).InvokeMember("allGridEntries", BindingFlags.NonPublic |
BindingFlags.GetField | BindingFlags.Instance, null, gridView, null);

for (int i = 0; i < allGridEntries.Count; i++)
{
GridItem gridItem = allGridEntries[i] as GridItem;
if (string.Compare(gridItem.Label, displayName, true) == 0)
{
Attribute attr = gridItem.PropertyDescriptor.Attributes[
attributeType];
FieldInfo field = attr.GetType().GetField(privaterEigenschaftsName,
BindingFlags.NonPublic | BindingFlags.Instance);
field.SetValue(attr, wertDesAttributes);
grid.Refresh();
break;
}
}
}
catch { throw; }
}

______________

oder ggf. auch:

[Dynamische "Attribut-Änderung" beim PropertyGrid]
http://dzaebel.net/PropertyGridReadOnly.htm
______________

Ganz sauber ginge es über den ICustomTypeDescriptor.
Aber das wàre jetzt eine etwas làngere Beschreibung:

[Tutorials and Resources for the Microsoft PropertyGrid]
http://www.propertygridresourcelist.com/


ciao Frank
Dipl. Inf. Frank Dzaebel [MCP, MVP C#]
http://Dzaebel.NET

Ähnliche fragen