Лучший способ справиться с коммуникацией между контейнерами - реализовать класс наблюдателя.
Шаблон наблюдателя - это шаблон проектирования программного обеспечения, в котором объект, называемый субъектом, поддерживает список своих зависимых, называемых наблюдателями.и автоматически уведомляет их о любых изменениях состояния, обычно вызывая один из их методов.(википедия)
то, как я это делаю, создает класс Observer:
1 public delegate void dlFuncToBeImplemented(int signal);
2 public static event dlFuncToBeImplemented OnFuncToBeImplemented;
3 public static void FuncToBeImplemented(int signal)
4 {
5 OnFuncToBeImplemented(signal);
6 }
так в основном: первая строка говорит, что будет функция, которую кто-то другой реализует
вторая строка создает событие, которое происходит, когда делегированная функция вызывает
, а третья строка - создание функции, которая вызывает событие
, поэтому в вашем UserControl вы должны добавитьфункционируйте так:
private void ObserverRegister()//will contain all observer function registration
{
Observer.OnFuncToBeImplemented += Observer_OnFuncToBeImplemented;
/*and more observer function registration............*/
}
void Observer_OnFuncToBeImplemented(int signal)//the function that will occur when FuncToBeImplemented(signal) will call
{
MessageBox.Show("Signal received!", "Atention!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
и в вашей форме вы должны сделать что-то вроде:
public static int signal = 0;
public void button1_Click(object sender, EventArgs e)
{
Observer.FuncToBeImplemented(signal);//will call the event in the user control
}
, и теперь вы можете зарегистрировать эту функцию для целого ряда других элементов управления и контейнеров иони все получат сигнал
Надеюсь, это поможет:)