调整ErrorProvider的系统图标大小

时间:2013-06-01 03:15:45

标签: icons system.drawing errorprovider

我正在尝试调整SystemIcon的大小以便在ErrorProvider中使用。

  Dim WarnProvider As New ErrorProvider
  WarnProvider.BlinkStyle = ErrorBlinkStyle.NeverBlink
  WarnProvider.Icon = SystemIcons.Information.Clone()
  WarnProvider.Icon.Size = New Size(16,16)

但SystemIcons的大小设置为只读属性。

过去一小时一直在搞乱它,并没有找到任何好的方法来完成这项工作。

有人可以帮忙吗?

由于

3 个答案:

答案 0 :(得分:4)

我一直在寻找一种方法来做到这一点,并且发现了这篇文章。这就是我最终要解决的问题。

我创建了一个全局静态方法来调整图标大小。

public static class Global
{
    public static Icon ResizeIcon( Icon icon, Size size )
    {
        Bitmap bitmap = new Bitmap(size.Width,size.Height);
        using( Graphics g = Graphics.FromImage(bitmap) )
        {
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.DrawImage(icon.ToBitmap(), new Rectangle(Point.Empty,size));
        }
        return Icon.FromHandle(bitmap.GetHicon());
    }
}

然后我在调用InitializeComponent()之后在表单的构造函数中应用了该图标。

public SpecificationsDialog( int pid )
{
    InitializeComponent();
    warningProvider1.Icon = Global.ResizeIcon(SystemIcons.Warning,SystemInformation.SmallIconSize);
}

答案 1 :(得分:0)

我一直在寻找相同的东西并在其他地方找到答案,所以我会在这里发布 http://www.codeproject.com/Questions/242780/error-provider-problem

WarnProvider.Icon = new Icon (SystemIcons.Warning, 16, 16);

WarnProvider.Icon = new Icon (WarnProvider.Icon, 16, 16);

答案 2 :(得分:0)

我稍微更改了Drew的解决方案,使其成为错误提供程序的扩展方法:

public static ErrorProvider SetIcon(this ErrorProvider errorProvider, Icon icon, Size size)
    {
        Bitmap bitmap = new Bitmap(size.Width, size.Height);
        using (Graphics g = Graphics.FromImage(bitmap))
        {
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.DrawImage(icon.ToBitmap(), new Rectangle(Point.Empty, size));
        }
        errorProvider.Icon = Icon.FromHandle(bitmap.GetHicon());
        return errorProvider;
    }

然后可以像这样使用它:

ErrorProvider ep = new ErrorProvider();
ep.SetIcon(SystemIcons.Asterisk, new Size(16,16));