Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Сообщение

sk


Ведущий Диалог

Зарегистрирован:
25 April 2005
Сообщения: 246
Примеры кода: 0
 

Как можно сократить код

06 August 2008 12:22  


На форме 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
Наверх
  



ADO.NET

 Как можно сократить кодangelina  05 August 2008 18:55
 Как можно сократить кодsk  05 August 2008 19:16
 Как можно сократить кодangelina  06 August 2008 11:22
 Как можно сократить кодangelina  06 August 2008 12:22
 Как можно сократить кодangelina  06 August 2008 12:25
 Как можно сократить кодsk  06 August 2008 12:22
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта