2009-08-20 9 views
0

Je suis complètement nouveau dans la programmation GUI et j'ai besoin d'un peu d'aide avec une liste de cadres d'image.Collections .NET et accès aux méthodes d'objets

L'idée est que j'ai une liste de cadres d'image. Lorsqu'un utilisateur clique sur celui que je veux (par exemple), changez la propriété BorderStyle de celle sélectionnée en Fixed3D, mais changez les bordures de collection restantes en FixedSingle (ou quelque chose comme ça). Quelle est la bonne façon de faire quelque chose comme ça? Je suppose que la plus grande image est comment puis-je obtenir une méthode d'une classe pour appeler une méthode d'un autre sans avoir aucune information à ce sujet?

class myPicture 
{ 
    private int _pictureNumber; 
    private PictureBox _box; 
    public myPicture(int order) 
    { 
    _box = new List<PictureBox>(); 
    _box.Click += new System.EventHandler(box_click); 
    _pictureNumber = order; 
    } 
    public void setBorderStyle(BorderStyle bs) 
    { 
    _box.BorderStyle = bs; 
    } 
    public void box_click(object sender, EventArgs e) 
    { 
    //here I'd like to call the set_borders from myPicturesContainer, but I don't know or have any knowledge of the instantiation 
    } 
} 

class myPicturesContainer 
{ 
    private List<myPicture> _myPictures; 
    //constructor and other code omitted, not really needed... 
    public void set_borders(int i) 
    { 
    foreach(myPicture mp in _MyPictures) 
     mp.setBorderStyle(BorderStyle.FixedSingle); 
    if(i>0 && _MyPictures.Count>=i) 
     _MyPictures[i].setBorderStyle(BorderStyle.Fixed3d); 
    } 
} 
+0

Cela dépend beaucoup de ce cadre UI que vous utilisez. Dans WPF, par exemple, vous le feriez avec des liaisons de propriétés et des styles (et éventuellement des modèles). –

Répondre

0

Vous devez créer un événement Clicked dans votre classe myPicture et élever cet événement lorsqu'il est cliqué. Ensuite, vous devrez joindre à cet événement dans votre myPicturesContainer pour chaque instance de myPicture que vous avez.

Voici un très exemple simple de ce que je veux dire:

class myPicture 
{ 
    public event Action<Int32> Clicked = delegate { }; 

    private int _pictureNumber; 

    public void box_click(object sender, EventArgs e) 
    { 
     this.Clicked(this._pictureNumber); 
    } 
} 

class myPicturesContainer 
{ 
    private List<myPicture> _myPictures; 

    public void set_borders(int i) 
    { 
     foreach (myPicture mp in _myPictures) 
     { 
      mp.Clicked += pictureClick; 
     } 
    } 

    void pictureClick(Int32 pictureId) 
    { 
     // This method will be called and the pictureId 
     // of the clicked picture will be passed in 
    } 
} 
+0

Cela a fonctionné parfaitement, merci! – Diego

Questions connexes