見出し画像

C# カスタムコントロールのプロパティをデザイナーから見えなくする方法

自分用の健忘禄です。

C#のカスタムコントロールを作ると新規のプロパティをフォームデザイナーで見ると「その他」のカテゴリになったり、見せたくないプロパティを非表示するメモです。

[Category("AAA")] で指定すればその他ではなくなる

[Category("MG")]
public int ListWidth
{
	get { return m_List.Width; }
	set
	{
		m_List.Width = value;
		ChkSize();
	}
}

非表示にするには"Browsable(false)"と指定します。

		[Category("MG"),Browsable(false)]
		public RectangleF Rect
		{
			get { return m_Rect; }
		}

元からあるプロパティを手作業で全部消すのは面倒なので以下の関数でコードを自動作成します。

using System.Reflection;

public static string GetProps(Type ct)
{
	// DateTimeのプロパティ一覧を取得する
	PropertyInfo[] p = ct.GetProperties();

	string s = "";
	foreach (var a in p)
	{
		if (a.CanWrite == true)
		{
			s += "// **************************************************************\r\n";
			s += $"[Browsable(false)]\r\n";
			s += $"public new {a.PropertyType.ToString()} {a.Name}\r\n";
			s += $"{{\r\n";
			s += $"	get {{ return base.{a.Name}; }}\r\n";
			s += $"	set {{ base.{a.Name} = value; }}\r\n";
			s += "}\r\n";
		}
	}
	return s;
}

上記のコードを以下のように実行させます。この例ではButtonのプロパティを獲得させてます。

			Clipboard.SetText(GetProps(typeof(Button)));

するとクリップボードにプロパティを遮蔽するコードが入ります。

// **************************************************************
[Browsable(false)]
public new System.Windows.Forms.IButtonControl AcceptButton
{
	get { return base.AcceptButton; }
	set { base.AcceptButton = value; }
}
// **************************************************************
[Browsable(false)]
public new System.Boolean AllowTransparency
{
	get { return base.AllowTransparency; }
	set { base.AllowTransparency = value; }
}
// **************************************************************
[Browsable(false)]
public new System.Boolean AutoScale
{
	get { return base.AutoScale; }
	set { base.AutoScale = value; }
}
//以下略

このコードを、カスタムコントロールのコードに入れればフォームデザイナから見えなくなります。

いいなと思ったら応援しよう!