Коллекции .NET и доступ к объектным методам - PullRequest
0 голосов
/ 21 августа 2009

Я совершенно новичок в программировании графического интерфейса, и мне нужна небольшая помощь со списком картинок.

Идея в том, что у меня есть список коробок с картинками. Когда пользователь нажимает на одну, я хочу (например) изменить свойство BorderStyle того, которое выбрано как Fixed3D, но изменить оставшиеся границы коллекции на FixedSingle (или что-то подобное). Как правильно сделать что-то подобное? Я предполагаю, что общая картина заключается в том, как мне заставить метод одного класса вызывать метод другого, не имея никакой информации об этом?

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

1 Ответ

0 голосов
/ 21 августа 2009

Вам нужно будет создать событие Clicked в вашем классе myPicture и вызвать это событие при нажатии. Затем вам нужно будет присоединиться к этому событию в вашем myPicturesContainer для каждого имеющегося у вас экземпляра myPicture.

Вот очень простой пример того, что я имею в виду:

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...