Dynamische "Attribut-Änderung" beim PropertyGrid
Frank Dzaebel, erstellt am: 25.10.2005, zuletzt geändert: 25.10.2005
Kategorie: PropertyGrid, .NET-Version: 1.1
Hier wird eine abgeleitete TextBox FdPropTest an das SelectableObject eines PropertyGrids gebunden.
Wenn nun zur Laufzeit die Eigenschaft Vorname geändert wird, bekommt diese das
Attribut ReadOnly und eine andere Description.
Der Beispiel-Code ist noch rudimentär, erfüllt aber schon seine Funktion.
Siehe auch:
-
Kategorien eines PropertyGrid's sortieren
-
PropertyGrid zur Laufzeit mit dem TypeConverter beeinflussen
using System;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace PropertyGridDynReadOnly
{
public class FdReadOnlyTrue: FdPropTest
{
public FdReadOnlyTrue(FdPropTest fdPropTest)
{
this.Vorname = fdPropTest.Vorname;
}
[ReadOnly(true)]
[Description("Neue Beschreibung fuer Vorname")]
[RefreshProperties(RefreshProperties.Repaint)]
public override string Vorname
{
get{return base.Vorname;}
}
}
public class FdPropTest: TextBox
{
public FdPropTest()
{
}
[RefreshProperties(RefreshProperties.Repaint)]
public override string Text
{
get { return base.Text; }
set { base.Text = value; }
}
private string vorname = "Frank";
[Description("Beschreibung fuer Vorname")]
[RefreshProperties(RefreshProperties.Repaint)]
public virtual string Vorname
{
get { return vorname; }
set
{
vorname = value;
if(this.FindForm() != null)
{
PropertyGrid pg = null;
foreach(Control ctl in this.FindForm().Controls)
if(ctl is PropertyGrid) //Dies noch rekursiv!
if(((PropertyGrid)ctl).SelectedObject == this)
pg = (PropertyGrid)ctl;
if(pg == null) return;
foreach (Control ctl in this.FindForm().Controls)
if(ctl.Name == this.Name) //Dies noch rekrusiv!
{
FdPropTest fpt = ((FdPropTest)ctl);
pg.SelectedObject = new FdReadOnlyTrue((FdPropTest)pg.SelectedObject);
break;
}
}
this.Text = vorname + " " + nachname;
}
}
private string nachname = "Dzaebel";
[Description("Beschreibung fuer Nachname")]
[RefreshProperties(RefreshProperties.Repaint)]
public virtual string Nachname
{
get { return nachname; }
set
{
nachname = value;
this.Text = vorname + " " + Nachname;
}
}
}
}