Zugriff auf GridItem in GridEntryCollection, wie?

23/03/2010 - 22:23 von Anja Länge | Report spam
Hallo,

wie kann man gezielt auf ein GridItem eines PropertyGrids zugreifen?
Es gibt die System.Windows.Forms.PropertyGridInternal.GridEntryCollection,
aber ich sehe derzeit keine Möglichkeit, auf ein Item daraus zuzugreifen.

Grüße
Anja
 

Lesen sie die antworten

#1 Frank Dzaebel
24/03/2010 - 00:10 | Warnen spam
Hallo Anja,

wie kann man gezielt auf ein GridItem eines PropertyGrids zugreifen?
Es gibt die
System.Windows.Forms.PropertyGridInternal.GridEntryCollection, aber ich
sehe derzeit keine Möglichkeit, auf ein Item daraus zuzugreifen.



Man kommt da überall mit Hilfe von Reflection heran.
Es ist nur etwas gefàhrlich, weil es sich auf private
Variablen bezieht. Nun - unten stehendes Beispiel làuft
auf .NET 2.0 und auch auf .NET 4.0:

public partial class Form1 : Form
{
private PropertyGrid propertyGrid1 = new PropertyGrid();
private Button btnTest = new Button();

public Form1()
{
InitializeComponent();

propertyGrid1.Anchor AnchorStyles.Top | AnchorStyles.Bottom |
AnchorStyles.Left | AnchorStyles.Right;
propertyGrid1.Location = new Point(13, 50);
propertyGrid1.Name = "propertyGrid1";
propertyGrid1.Size = new Size(259, 200);
propertyGrid1.TabIndex = 0;
Controls.Add(propertyGrid1);
propertyGrid1.SelectedObject = this;

btnTest.Location = new Point(13, 13);
btnTest.Name = "Test"; btnTest.Size = new Size(75, 23);
btnTest.TabIndex = 1; btnTest.Text = "Test";
btnTest.UseVisualStyleBackColor = true;
btnTest.Click += new EventHandler(this.btnTest_Click);
Controls.Add(btnTest);
}

private void btnTest_Click(object sender, EventArgs e)
{
FieldInfo entriesField = propertyGrid1.GetType().
GetField("currentPropEntries", BindingFlags.NonPublic |
BindingFlags.Instance);
GridItemCollection gridItems = entriesField.
GetValue(propertyGrid1) as GridItemCollection;
foreach (GridItem gridItem in gridItems)
Anzeige(gridItem);
}

private void Anzeige(GridItem gridItem)
{
Console.WriteLine("");
Console.WriteLine(gridItem.GridItemType.
ToString() + " / " + gridItem.Label + " = "
+ gridItem.Value);
foreach (GridItem gi in gridItem.GridItems)
Console.WriteLine(" " + gi.GridItemType.
ToString() +" / " +gi.Label+ " = " +gi.Value);
}
}


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

Ähnliche fragen