На форме 4 кнопки Knoten1 - 4. При загрузке формы кнопкам 1-2 присваиваем Tag равный их номерам и вешаем клики на один обработчик Knoten_Click. В результате в Knoten_Click смотрим что sender у нас есть Button, читаем его Tag в string и вызываем метод GoKnoten с параметром только-что вытащином из тега. В результате видим MessageBox с параметром.
Но! Мы не ищем легких путей!
Некрасиво как-то получается, ведь в обработчике будет жестко указан какой метод надо вызывать (в нашем случае это GoKnoten), потому быстро рисуем делегат для вызова метода с параметром String и класс Tag4Knoten в полях которого укажем экземпляр нашего делегата (который уже знает какой метод нужно вызывать), и параметр. Теперь Tag кнопки содержит информацию (класс) какой метод и с какими параметрами нужно вызывать при клике на кнопку. Для кнопки 3 создаем экземпляр нашего класса с делегатом на метод GoKnoten и параметром "Knoten3", а для кнопки 4 с делегатом на метод GoKnoten2 и параметром "Knoten4". Нужно клики на кнопках 3 и 4 переписать следующим образом, чтобы теперь из Tag "забирать" объект типа Tag4Knoten и вызывать указанный у его делегате методе с указанным в его поле параметром.
Ок?
private void Form2_Load(object sender, EventArgs e)
{
Knoten1.Click +=new EventHandler(Knoten_Click);
Knoten2.Click += new EventHandler(Knoten_Click);
Knoten1.Tag = "Knoten1";
Knoten2.Tag = "Knoten2";
Knoten3.Click += new EventHandler(Knoten_Click2);
Knoten4.Click += new EventHandler(Knoten_Click2);
Knoten3.Tag = new Tag4Knoten(new GoKnotenDelegate(GoKnoten), "Knoten3");
Knoten4.Tag = new Tag4Knoten(new GoKnotenDelegate(GoKnoten2), "Knoten4");
}
private void Knoten_Click(object sender, EventArgs e){
Button b = sender as Button;
if ( b != null) {
if (b.Tag != null) {
string tag = b.Tag.ToString();
GoKnoten(tag);
}
}
}
private void Knoten_Click2(object sender, EventArgs e){
Button b = sender as Button;
if (b != null){
if (b.Tag is Tag4Knoten && b.Tag != null){
Tag4Knoten tag = (Tag4Knoten)b.Tag;
tag.KnotenDelegate.Invoke(tag.KnotenParam);
}
}
}
private void GoKnoten(string param) {
MessageBox.Show("From GoKnoten " + param);
}
private void GoKnoten2(string param){
MessageBox.Show("From GoKnoten2 " + param);
}
public delegate void GoKnotenDelegate(string param);
class Tag4Knoten {
public Tag4Knoten(GoKnotenDelegate knotenDelegate, string knotenParam) {
KnotenDelegate = knotenDelegate;
KnotenParam = knotenParam;
}
public GoKnotenDelegate KnotenDelegate;
public string KnotenParam;
}
Быть сильным и умным это не значит превосходить в силе и уме, а уметь слабого поднять до высот своих.
vfp forever
Данное сообщение получено с сайта GotDotNet.RU
Последний раз редактировалось 06 August 2008 12:21
|