|
重要なプロパティには、*Changedイベントが用意されている。
リフレクションで *Changedイベントを取り出してイベントハンドラを追加する。
public Form1()
{
InitializeComponent();
AddPropertyChangedEvent(this.textBox1);
}
private void AddPropertyChangedEvent(Control c)
{
foreach (EventInfo e in c.GetType().GetEvents()) {
if (e.Name.EndsWith("Changed")) {
string name = e.Name.Substring(0, e.Name.Length - 7);
PropertyChanged p = new PropertyChanged(c, name);
e.AddEventHandler(c, new EventHandler(p.Changed));
}
}
}
public class PropertyChanged
{
public readonly Control c;
public readonly string name;
public object last_value;
public PropertyChanged(Control c, string name)
{
this.c = c;
this.name = name;
this.last_value = value;
}
public object value
{
get
{
PropertyInfo p = c.GetType().GetProperty(name);
return (p != null) ? p.GetValue(c, null) : null;
}
}
public void Changed(object sender, EventArgs e)
{
Debug.WriteLine(c.Name + "." + name + ":" + last_value + "→" + value);
last_value = value;
}
}
|