У меня есть три пользовательских элемента управления. Вот описание их: 1) Первый пользовательский элемент управления (ucCountry) содержит поле комбинированного списка, которое отображает названия страны из XML-файла.
2) Второй пользовательский элемент управления (ucChannelType) содержит два переключателя один для выбора ТВ и другого для выбора Радио-Типа канала.
3) Треть usercontrol (ucChannels) заполнит все каналы, где название страны обеспечивается ucCountry, и введите обеспеченный ucChannelType
Теперь, как передать между ними пользовательский элемент управления в форме. Я должен отделить usercontrols от формы. Так, я должен использовать события. Но если ucCountry стреляет, событие (скажите, что событие CountryChanged), и ucChannels подписывают событие, как получить тип канала от ucChannelType.
Заранее спасибо...
Лучшее решение - добавить свойства в пользовательские элементы управления. в фоновом режиме могут отсутствовать поля, геттеры будут просто получать данные из свойства внутреннего стандартного элемента управления.
Вы можете либо иметь свойство на ucCountry
, которое предоставляет текущую выбранную страну. Что-то вроде:
public Country SelectedCountry
{
get
{
return (Country) myComboBox.SelectedItem;
}
}
А затем, когда событие срабатывает, другие элементы управления получают это свойство.
Другой вариант - использовать пользовательский делегат события, так что обработчик события для ucCountry.CountryChanged
будет иметь параметр страны:
public delegate void CountryChangedDelegate(Country sender)
public event CountryChangedDelegate CountryChanged;
Обработчик события в ucChannels:
public void ucCountry_CountryChanged(Country sender)
{
//do something with the new country
}
И передать событие в ucChannels:
myUcCountry.CountryChanged += new CountryChangedDelegate(ucCountry_CountryChanged);
У вас должны быть общедоступные свойства для элементов управления, предоставляющих данные, и открытый метод для регистрации событий для элемента управления, потребляющего данные. Вот краткий пример:
public static void Test()
{
var a = new A();
var b = new B();
var c = new C() {a = a, b = b};
a.OnChange += c.Changed;
b.OnChange += c.Changed;
a.State = "CA";
b.ChannelType = "TV";
}
class A
{
private string _state;
public string State
{
get { return _state; }
set
{
_state = value;
if (OnChange != null) OnChange(this, EventArgs.Empty);
}
}
public event EventHandler<EventArgs> OnChange;
}
class B
{
private string _channelType;
public string ChannelType
{
get { return _channelType; }
set
{
_channelType = value;
if (OnChange != null) OnChange(this, EventArgs.Empty);
}
}
public event EventHandler<EventArgs> OnChange;
}
class C
{
public A a { get; set; }
public B b { get; set; }
public void Changed(object sender, EventArgs e)
{
Console.WriteLine("State: {0}\tChannelType: {1}", a.State, b.ChannelType);
}
}