Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Взаимодействие 2 классов на С#

30K
03 июня 2008 года
Shem88
14 / / 22.10.2007
Рад приветствовать всех "местных" программистов, особенно тех кто сейчас как и я не спит))
Суть проблемы:
Есть класс унаследованный от Button, есть 2-ой класс унаследован от Panel,т.е. используется в качестве контейнера.
2ой класс своим членом имеет 2мерный массив объектов 1го класса.
Подскажите пожалуйста, как мне организовать взаимодействие классов таким образом, чтобы при обработке события, возникающего в 1ом классе я мог бы работать с массивом из 2го класса.

Пожалуйста не стесняйтесь предлагать любые Ваши версии - все обсудим, все разжуем, если нужны будут подробности, также спрашивайте - отвечу!

Искренне верю что т.с. "Мозговым штурмом" совместно с Вами, талантливыми программистами мы сможем решить эту проблемКу!

Очень жду ответов):)
11
03 июня 2008 года
oxotnik333
2.9K / / 03.08.2007
если правильно понял:

Код:
class MyButton :Button
{
...
}

class MyPanel :Panel
{
public List<MyButton> mBtnArray;
....
}

MyButton.Parent = MyPanel;

private void MyButton_Click(object sender, EventArgs e)
{
  MyButton btn = sender as MyButton;
  MyPanel pan = btn.Parent as MyPanel;
  foreach (MyButton mBtn in pan.mBtnArray)
  {
     // здесь делаем что хотим
  }
}
341
03 июня 2008 года
Der Meister
874 / / 21.12.2007
С массивом работать было бы логично работать непосредственно в потомке от Panel, следовательно, можно просто подписываться на соответствующее событие при добавлении кнопки в массив.
30K
03 июня 2008 года
Shem88
14 / / 22.10.2007
Спасибо Вам обоим за то что ответили! Благодаря Вам я прекрасно понял что до полного перехода с плюсов на С-диез мне еще далеко ибо с такой вещью как делегаты (наверно Вы про них...?) я еще не знаком.
И поэтому я решил свою проблемку как говорится "по-тупому":
Так как класс-контейнер в приложении всегда возможен только один я объявил статическим его поле с массивом кнопок, ну и соответственно у меня все получилось))

Все равно хочу Вам выразить благодарность за то, что откликнулись, ну а я пойду ИЗУЧАТЬ С# дальше)
341
04 июня 2008 года
Der Meister
874 / / 21.12.2007
Там не сложно. Hапример, если класс, производный от Panel, задумывался для отображения исключительно экземпляров класса, производного от Button, то массив можно не использовать, а вместо этого задействовать свойство Controls, и в обработчике события ControlAdded класса, производного от Panel, написать что-то типа
Код:
private void MyPanel_ControlAdded(object sender, ControlEventArgs e)
{
    try
    {
        MyButton button = e.Control as MyButton;
        button.Click += new EventHandler(Button_Click);
    }
    catch // (InvalidCastException ex)
    {
        return;
    }
}

void Control_Click(object sender, EventArgs e)
{
    MyButton button = sender as MyButton;
    // Делаем чё надо. Скажем, foreach (MyButton control in this.Controls)...
}

Например, две тысячи пятая студия предлагает автоматически сгенерировать обработчик после ввода +=
30K
04 июня 2008 года
Shem88
14 / / 22.10.2007
Во, вообще красота, Der Meister!!! Жаль, что сам не додумался, но это опять же, наверно, Опыт...опыт...опыт...
Спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог