gpt4 book ai didi

c# - 我可以使用反射来检测控件对透明背景的支持吗?

转载 作者:行者123 更新时间:2023-11-30 17:00:28 25 4
gpt4 key购买 nike

我正在使用以下代码将控件的 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 的类才有不支持“Transparent 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 的实例

关于c# - 我可以使用反射来检测控件对透明背景的支持吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22197749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com