2009-08-20 6 views
0

Ich bin völlig neu in der GUI-Programmierung und brauche ein wenig Hilfe mit einer Liste von Bildkästen..NET-Sammlungen und Zugriff auf Objektmethoden

Die Idee ist, dass ich eine Liste von Bildkästen habe. Wenn ein Benutzer auf einen klickt, möchte ich (z. B.) die BorderStyle-Eigenschaft des als Fixed3D ausgewählten ändern, aber die verbleibenden Sammlungsrahmen in FixedSingle (oder so ähnlich) ändern. Was ist der richtige Weg, um so etwas zu tun? Ich denke, das größere Bild ist, wie bekomme ich eine Methode einer Klasse, um eine Methode eines anderen zu nennen, ohne irgendwelche Informationen darüber zu haben?

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

Es hängt sehr stark ab, welche UI-Framework Sie verwenden. In WPF beispielsweise würden Sie dies mit Eigenschaftsbindungen und -stilen (und möglicherweise Vorlagen) tun. –

Antwort

0

Sie benötigen ein Clicked Ereignis in Ihrer myPicture Klasse erstellen und dieses Ereignis auslösen, wenn es angeklickt wird. Dann müssen Sie dieses Ereignis in Ihrem myPicturesContainer für jede Instanz von myPicture, die Sie haben, anhängen. Hier

ist ein sehr einfaches Beispiel dafür, was ich meine:

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

Das hat perfekt funktioniert, danke! – Diego

Verwandte Themen