SupportsTransparentBackColor

SupportsTransparentBackColor

我正在使用以下代码将控件的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”的限制,因此只有在ToolStripItemToolStripControlHost时才可以安全地检查,否则可以假定它受支持(尽管可以正确测试)。

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


其中textBox1TextBox的实例,label1Label的实例

10-07 12:55