コントロールのプロパティをカスタマイズするためのプロパティ グリッドであるプログラマーを提供する必要があるユーザー コントロール ライブラリを開発しています。
プログラマーSystem.Windows.Forms.PropertyGrid
(または Visual Studio のデザイナー)を使用する場合、同じユーザー コントロールの他のプロパティに応じて
、プロパティ フィールドの一部を有効/無効にする必要があります。
どうやってするの?System.Windows.Forms.PropertyGrid
シナリオ例
これは実際の例ではなく、説明のみです。
例: UserControl1
2 つのカスタム プロパティがあります:
MyProp_Caption : 文字列
と
MyProp_Caption_Visible : bool
これで、MyProp_Caption_Visibleが true の場合にのみ、PropertyGrid でMyProp_Captionを有効にする必要があります。
UserControl1 のサンプル コード
public class UserControl1: UserControl <br/>
{
public UserControl1()
{
// skipping details
// label1 is a System.Windows.Forms.Label
InitializeComponent();
}
[Category("My Prop"),
Browsable(true),
Description("Get/Set Caption."),
DefaultValue(typeof(string), "[Set Caption here]"),
RefreshProperties(RefreshProperties.All),
ReadOnly(false)]
public string MyProp_Caption
{
get
{
return label1.Text;
}
set
{
label1.Text = value;
}
}
[Category("My Prop"),
Browsable(true),
Description("Show/Hide Caption."),
DefaultValue(true)]
public bool MyProp_Caption_Visible
{
get
{
return label1.Visible;
}
set
{
label1.Visible = value;
// added as solution:
// do additional stuff to enable/disable
// MyProp_Caption prop in the PropertyGrid depending on this value
PropertyDescriptor propDescr = TypeDescriptor.GetProperties(this.GetType())["MyProp_Caption"];
ReadOnlyAttribute attr = propDescr.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
if (attr != null)
{
System.Reflection.FieldInfo aField = attr.GetType().GetField("isReadOnly", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
aField.SetValue(attr, !label1.Visible);
}
}
}
}
この UserControl1 の PropertyGrid のサンプル コード
tstFrm は、次の 2 つのデータ メンバーを持つ単純なフォームです。
private System.Windows.Forms.PropertyGrid propertyGrid1; private UserControl1 userControl11;
また、以下のように、propertyGrid1 を介して userControl1 をカスタマイズできます。
public partial class tstFrm : Form
{
public tstFrm()
{
// tstFrm embeds a PropertyGrid propertyGrid1
InitializeComponent();
propertyGrid1.SelectedObject = userControl11;
}
}
MyProp_Caption_Visible の値に応じて、プロパティ グリッドでフィールド MyProp_Caption を有効/無効にする方法は?