2009-07-17 8 views
3

Je souhaite avoir UNE instance d'une liste d'images que je souhaite partager sur tous les formulaires de mes applications (icônes de la barre d'outils). J'ai vu la question précédemment posée et les gens ont proposé un contrôle utilisateur (ce qui n'est pas bon, car cela va créer plusieurs instances de l'imagelist et donc créer des objets inutiles et des frais généraux).Partage de l'image dans l'application .Net Winforms

Le support du temps de conception serait bon, mais pas très essentiel.

En Delphi, c'était assez simple: créer un DataForm, partager les images et vous êtes éteint.

Y a-t-il une variation C# /. Net/Winforms sur cela?

Répondre

5

Vous pouvez tout simplement faire une classe statique tenir une instance ImageList, et l'utiliser dans votre application, je suppose:

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; } 
} 

Ensuite, vous pouvez charger des images du ImageList hébergé:

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

Aucun support de temps de conception dans cette solution cependant.

3

vous pouvez utiliser une classe singleton comme ça (voir ci-dessous). Lequel vous pouvez utiliser le concepteur pour peupler la liste d'images, puis lier à n'importe quelle liste d'images que vous utilisez manuellement.


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; 
    } 
} 
Questions connexes