Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование переопределенных событий 
:(
    Опции темы
3she1on
Дата 11.11.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 15.10.2008

Репутация: нет
Всего: нет



Всем доброго времени суток! Недавно начал освоение СиШарп и столкнулся с такой проблемой: Есть класс, допустим звать его SampleClass, унаследованный от System.Windows.Control. В этом классе перегружается обработчик события OnClick: 
Код

protected override void OnClick(EventArgs e)
        {
            //TODO: ....
        }


В другом классе, допустим TargetClass, создаю обьект типа SampleClass:
Код

...
SampleClass sClass = new SampleClass();
...


В конструкторе TargetClass пишу следующее:
Код

sClassюClick += new EventHandler(sClass_Click);


далее:
Код

void imgIcon_Click(object sender, EventArgs e)
        {
            //TODO: ...
        }

Вот что-то вся эта конструкция не работает (((
заранее, благодарен за пом0щь!
PM MAIL   Вверх
diadiavova
Дата 11.11.2008, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



OnClick - не обработчик события, а метод, в котором это событие инициируется в классе Control. Если ты переопределяешь этот метод - тебе надо вызвать метод базового класса, или инициировать в нём событие самому
Код

protected override void OnClick(EventArgs e)
        {
             base.OnClick(e);
            //TODO: ....
        }





--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
3she1on
Дата 11.11.2008, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 15.10.2008

Репутация: нет
Всего: нет



спасибо за ответ. не могу осознать всю эту модель ((. курю маны
PM MAIL   Вверх
diadiavova
Дата 11.11.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Да собсно... ничего сверхъестественного. Просто для инициализации события используется соответствующий метод. Если метод переопределён, то базовый класс будет вместо собственной реализации метода вызывать переопределённую его версию. Для того, чтобы действия описанные в первоначальной версии метода тоже выполнялись, при переопределении надо вызывать переопределяемый метод базового класса. Вот и всё smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
3she1on
Дата 11.11.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 15.10.2008

Репутация: нет
Всего: нет



Эм... Хорошо. не нужны мне действия первоначальной версии. в переопределённом методе пишу свои действия
(маленькое объяснение... Этот класс, по идее, должен представлять собой кликабельную иконку с прозрачным фоном для dotnetcf):
Код

public class ImageIcon : Control
    {
        private Image icon = null;
        private int iconPosX, iconPosY;

        public ImageIcon(Image img, int x, int y)
        {
            icon = img;
            iconPosX = x;
            iconPosY = y;
        }

        protected override void OnClick(EventArgs e)
        {
            MessageBox.Show("Clicked!");
        }

        public void drawIcon(Graphics g)
        {
            System.Drawing.Imaging.ImageAttributes imgAttr = new System.Drawing.Imaging.ImageAttributes();
            imgAttr.SetColorKey(Color.FromArgb(13, 13, 13), Color.FromArgb(13, 13, 13));

            g.DrawImage(icon, new Rectangle(x, y, icon.Width, icon.Height), 0, 0, icon.Width, icon.Height, GraphicsUnit.Pixel, imgAttr); 
        }     
    }


в другом классе создаю объект выше обозначенного класса. вызываю в опред. месте его метод "drawIcon". контрол норм рисуется, но не кликабелен
PM MAIL   Вверх
diadiavova
Дата 12.11.2008, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Зачем вообще переопределять метод, когда можно просто обработать событие
Код

public class ImageIcon : Control
    {
        private Image icon = null;
        private int iconPosX, iconPosY;
        public ImageIcon(Image img, int x, int y)
        {
            icon = img;
            iconPosX = x;
            iconPosY = y;
            this.Click += new EventHandler(ImageIcon_Click);
        }
        void ImageIcon_Click(Object sender, EventArgs e)
        {
            MessageBox.Show("Clicked!");
        }
        public void drawIcon(Graphics g)
        {
            System.Drawing.Imaging.ImageAttributes imgAttr = new System.Drawing.Imaging.ImageAttributes();
            imgAttr.SetColorKey(Color.FromArgb(13, 13, 13), Color.FromArgb(13, 13, 13));
            g.DrawImage(icon, new Rectangle(x, y, icon.Width, icon.Height), 0, 0, icon.Width, icon.Height, GraphicsUnit.Pixel, imgAttr); 
        }     
    }


Это сообщение отредактировал(а) diadiavova - 12.11.2008, 01:47


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
3she1on
Дата 12.11.2008, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 15.10.2008

Репутация: нет
Всего: нет



у меня вот другая трабла образовалась... в Вин приложении создаю из шаблона UserControl собственную загогулину, нормально добавляю функционал, обработку событий. Контол автоматом добавляется в ТулБокс. Я его кидаю на форму и все как часики швейцарские. Пишу для компактФреймворк - ЮзерКонтрол не появляется в ТулБоксе.  smile 
PM MAIL   Вверх
3she1on
Дата 12.11.2008, 04:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 15.10.2008

Репутация: нет
Всего: нет



Итоги. Покурил маны - отпустило ))). С событиями все в порядке - разобрался. С контролами - тоже. В принципе, вопрос закрыт. Создал контрол, который рисует нужную мне картинку с корректной прозрачностью и обрабатывает клик. Но осталась проблема с прозрачностью самого контрола, как контейнера для нарисованной картинки. Но это уже проблема в рамках Compact Framework. Спасибо за участие!
PM MAIL   Вверх
diadiavova
Дата 12.11.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(3she1on @  12.11.2008,  04:24 Найти цитируемый пост)
Но осталась проблема с прозрачностью самого контрола, как контейнера для нарисованной картинки.

Там просто надо задать ему BackColor с прозрачностью, только делать это надо в коде, а не в дизайнере
Код

 public ImageIcon(Image img, int x, int y)
        {
            icon = img;
            iconPosX = x;
            iconPosY = y;
            this.Click += new EventHandler(ImageIcon_Click);
            this.BackColor = Color.FromARGB(128, 0, 255, 100);//не знаю, что за цвет, но полупрозрачный
        }


Имя функции FromARGB писал по памяти, так что если ошибся в регистре - сам исправь.



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
3she1on
Дата 12.11.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 15.10.2008

Репутация: нет
Всего: нет



Ругается на 4 аргумента
PM MAIL   Вверх
diadiavova
Дата 12.11.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Ну да - это чудеса компактфреймвока. Ничего не попишешь - здесь это просто не предусмотрено.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.