Ele*_*ios 4 .net c# vb.net transparency winforms
在 Windows 窗体技术下,我正在继承Form类并覆盖OnControlAdded事件调用器,我的意图是添加到我的窗体的控件集合中的每个控件都将其Control.BackColor属性设置为Color.Transparentvalue,而不管控件的默认颜色继承已添加到我的表单中。
但是,您可能知道,某些控件(例如ListView不接受透明度)以及在尝试设置Color.Transparent值时,System.ArgumentException会抛出 a 告诉您可以设置透明颜色。
那么,我的问题是:
在 C# 或 VB.NET 中,这将是在运行时确定控件是否允许透明背景颜色 ( Color.Transparent)的正确方法(可能使用反射,或者可能调用 Win32 函数)?...而不是处理指定的异常或switch例如,对案例中的控制类型进行分类。
要检查控件是否支持Transparent背景色,您可以GetStyle通过传递使用控件的方法ControlStyles.SupportsTransparentBackColor标志作为输入。
结果是一个bool值,它告诉您控件是否支持该样式。
如果
true,则控件接受BackColoralpha 分量小于 255 的 a 来模拟透明度。仅当 UserPaint 位设置为 true 并且父控件从 Control 派生时才会模拟透明度。
该方法是受保护的,因此可以在派生类中访问它。
如果要从控件外部使用它,则需要通过反射调用它:
public static bool GetControlStyle(Control control, ControlStyles flags)
{
Type type = control.GetType();
BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance;
MethodInfo method = type.GetMethod("GetStyle", bindingFlags);
object[] param = { flags };
return (bool)method.Invoke(control, param);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |