我正在使用以下代码将控件的BackColor
属性一般设置为Color.Transparent
:
protected override void OnItemAdded(ToolStripItemEventArgs e)
{
base.OnItemAdded(e);
Type t = e.Item.GetType();
PropertyInfo pInfo = t.GetProperty("BackColor");
if (pInfo != null)
pInfo.SetValue(e.Item, Color.Transparent, null);
}
当然,当所涉及的控件不支持它时,我会得到一个
ArgumentException
。因此,我想检查一下该支持是否存在。如何完成这项检查?
最佳答案
我相信只有从ToolStripControlHost
继承的类具有不支持“透明BackColor”的限制,因此只有在ToolStripItem
为ToolStripControlHost
时才可以安全地检查,否则可以假定它受支持(尽管可以正确测试)。
private bool SupportsTransparentBackColor(ToolStripItem item)
{
var host = item as ToolStripControlHost;
if (host != null)
{
return SupportsTransparentBackColor(host.Control);
}
return true;
}
private bool SupportsTransparentBackColor(Control control)
{
MethodInfo getstyle = typeof(Control).GetMethod("GetStyle", BindingFlags.Instance | BindingFlags.NonPublic);
return (bool)getstyle.Invoke(control, new object[] { ControlStyles.SupportsTransparentBackColor });
}
bool textboxResult = SupportsTransparentBackColor(textBox1);//false
bool labelResult = SupportsTransparentBackColor(label1);//true
其中
textBox1
是TextBox
的实例,label1
是Label
的实例