如何在winforms tabcontrol标签页上显示多个图标?

时间:2014-03-11 13:04:01

标签: winforms tabcontrol imagelist

我不知道是否有可能,但也许有人找到了这样做的方法...... 我有一个选项卡控件,我允许用户通过单击按钮添加选项卡。 我想在选项卡上显示一些图标,所以我添加了一个ImageList,但我一次只能显示一个图标,我需要一起显示至少3个图标。 我想过将3个图标放在一起的图像,但是在使用了一些动作之后会显示图标。例如:首先我显示icon_1,如果用户点击了我添加icon_2等的地方... 有人能想出办法吗? 非常感谢你提前...

2 个答案:

答案 0 :(得分:0)

没有。这是不可能的。使用标准的WinForms TabControl组件,您只能同时显示一个图像。

此处的解决方案是使用叠加图标。您有一个基本图标,并添加装饰器。这就是Tortoise SVN,例如,

enter image description here

以下代码在C#中构建重叠图像:

    private static object mOverlayLock = new object();

    public static Image GetOverlayedImage(Image baseImage, Image overlay)
    {
        Image im = null;
        lock (mOverlayLock)
        {
            try
            {
                im = baseImage.Clone() as Image;
                Graphics g = Graphics.FromImage(im);
                g.DrawImage(overlay, 0, 0, im.Width, im.Height);
                g.Dispose();
            }
            catch
            {
                // log your exception here
            }
        }
        return im;
    }

注意:叠加的图像必须与基本图像具有相同的大小。它必须具有透明色,并且叠加图像中的装饰器必须放在正确的位置,例如右下角或右上角。

答案 1 :(得分:0)

我找到了这段代码:

private Bitmap CombineImages(params Image[] images)
    {
        int width = 0;
        for (int i = 0; i < images.Length; i++)
            width += images[i].Width + 3;

        int height = 0;
        for (int i = 0; i < images.Length; i++)
        {
            if (images[i].Height > height)
                height = images[i].Height;
        }
        int nIndex = 0;
        Bitmap fullImage = new Bitmap(width, height);
        Graphics g = Graphics.FromImage(fullImage);
        g.Clear(SystemColors.AppWorkspace);
        foreach (Image img in images)
        {
            if (nIndex == 0)
            {
                g.DrawImage(img, new Point(0, 0));
                nIndex++;
                width = img.Width;
            }
            else
            {
                g.DrawImage(img, new Point(width, 0));
                width += img.Width;
            }
        }
        return fullImage;
        //img3.Save(finalImage, System.Drawing.Imaging.ImageFormat.Jpeg);
        //img3.Dispose();
        //imageLocation.Image = Image.FromFile(finalImage);
    }

来自此链接http://www.codeproject.com/Articles/502249/Combineplusseveralplusimagesplustoplusformplusaplu