使用PropertyGrids获取属性的属性

时间:2015-08-03 21:29:45

标签: c# propertygrid

我正在尝试使用PropertyGrids来允许我的程序用户与C#对象进行交互。下图是一个示例:

enter image description here

左侧的树视图列出了我的WallType类的实例。 WallType的属性包括Lumber对象,我的另一个类。假设我想将Lumber属性的等级从2更改为3.当用户进行此更改时,我想用“您确定”的提示提示它们。如果用户说“不”,我想恢复到该代码应该执行的原始值2

DialogResult result = MessageBox.Show("This wall (" + wall.ToString() + ") has been manually edited. Regenerating it will reset those changes and the wall will go back to how it looks by default. Press Yes to continue or No to cancel regenerating this wall", "Regeneration Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

if (result == DialogResult.No) //Cancelling if user does not want to regenerate wall
{
    var item = e.ChangedItem;
    var propertyName = item.PropertyDescriptor.Name;
    PropertyInfo pi = this.propertyGrid1.SelectedObject.GetType().GetProperty(propertyName);

    var oldValue = e.OldValue;
    pi.SetValue(this.propertyGrid1.SelectedObject, oldValue, null);
    return;
}

此代码的问题在于它检查我的WallType类的属性Grade而不是内部属性的Lumber类。我无法硬编码来检查特定属性,因为有许多不同类型的属性。如何更改此代码以检查内部属性的类而不仅仅是WallType类?

0 个答案:

没有答案