Поделиться списком изображений в приложении .Net Winforms - PullRequest
3 голосов
/ 17 июля 2009

Я хочу иметь ОДИН экземпляр экземпляра списка изображений, которым я хочу поделиться со всеми формами в моих приложениях (иконки для панели инструментов). Я видел вопрос, заданный ранее, и люди придумали пользовательский элемент управления (что не очень хорошо, поскольку он будет создавать несколько экземпляров списка изображений и, следовательно, создавать ненужные объекты и накладные расходы).

Поддержка времени разработки была бы хорошей, но не очень важной.

В Delphi это было довольно просто: создайте DataForm, поделитесь изображениями, и все готово.

Есть ли в этом вариант C # /. Net / Winforms?

Ответы [ 2 ]

5 голосов
/ 17 июля 2009

Вы можете просто сделать статический класс, содержащий экземпляр ImageList, и использовать его в своем приложении, я думаю:

public static class ImageListWrapper
{
    static ImageListWrapper()
    {
        ImageList = new ImageList();
        LoadImages(ImageList);
    }

    private static void LoadImages(ImageList imageList)
    {
        // load images into the list
    }

    public static ImageList ImageList { get; private set; }
}

Затем вы можете загрузить изображения из размещенного ImageList:

someControl.Image = ImageListWrapper.ImageList.Images["some_image"];

В этом решении нет поддержки времени разработки.

3 голосов
/ 17 июля 2009

вы можете использовать одноэлементный класс, как это (см. Ниже). Который вы можете использовать дизайнер, чтобы заполнить список изображений, а затем привязать к тому, что список изображений вы используете вручную.


using System.Windows.Forms;
using System.ComponentModel;

//use like this.ImageList = StaticImageList.Instance.GlobalImageList
//can use designer on this class but wouldn't want to drop it onto a design surface
[ToolboxItem(false)]
public class StaticImageList : Component
{
    private ImageList globalImageList;
    public ImageList GlobalImageList
    {
        get
        {
            return globalImageList;
        }
        set
        {
            globalImageList = value;
        }
    }

    private IContainer components;

    private static StaticImageList _instance;
    public static StaticImageList Instance
    {
        get
        {
            if (_instance == null) _instance = new StaticImageList();
            return _instance;
        }
    }

    private StaticImageList ()
        {
        InitializeComponent();
        }

    private void InitializeComponent()
    {
        this.components = new System.ComponentModel.Container();
        this.globalImageList = new System.Windows.Forms.ImageList(this.components);
        // 
        // GlobalImageList
        // 
        this.globalImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
        this.globalImageList.ImageSize = new System.Drawing.Size(16, 16);
        this.globalImageList.TransparentColor = System.Drawing.Color.Transparent;
    }
}
...