在设计视图属性网格中禁用属性

时间:2011-12-30 06:56:18

标签: .net winforms user-controls propertygrid design-view

我想在自定义控件中公开一些属性。我需要从控件中获取我公开为Browsable属性的三个参数的输入。根据一个属性的输入,可能不需要其他两个属性。如何根据第一个属性的选择禁用/隐藏不需要的属性?

1 个答案:

答案 0 :(得分:3)

是的,通过一点反思,你可以做到这一点:

public class TestControl : Control {
  private string _PropertyA = string.Empty;
  private string _PropertyB = string.Empty;

  [RefreshProperties(RefreshProperties.All)]
  public string PropertyA {
    get { return _PropertyA; }
    set {
      _PropertyA = value;

      PropertyDescriptor pd = TypeDescriptor.GetProperties(this.GetType())["PropertyB"];
      ReadOnlyAttribute ra = (ReadOnlyAttribute)pd.Attributes[typeof(ReadOnlyAttribute)];
      FieldInfo fi = ra.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
      fi.SetValue(ra, _PropertyA == string.Empty);
    }
  }

  [RefreshProperties(RefreshProperties.All)]
  [ReadOnly(true)]
  public string PropertyB {
    get { return _PropertyB; }
    set { _PropertyB = value; }
  }
}

每当PropertyA为空字符串时,这将禁用PropertyB。

在描述此过程的the Code Project上找到了这篇文章。