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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> события составного элемента управления, не работают события у составного ЭУ 
:(
    Опции темы
jackfall
Дата 27.1.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Создал составной элемент управления, панелька, кнопка и текст. накидал их потом на форму, ставлю события на нажатие мыши, а нет( не работает вообще. Вообще никакие события е работают. Может их надо было как то переопределять когда создавал ЭУ? Подскажите плз.
PM MAIL   Вверх
antikom
Дата 27.1.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Смотря какое событие. Покажи код будем разбираться.
PM MAIL WWW ICQ Skype YIM   Вверх
jackfall
Дата 27.1.2009, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



та из стандартных.. в окне выбрать.. например MouseDown. 
PM MAIL   Вверх
antikom
Дата 28.1.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Попробуй переопределить событие:
Код

protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
        }

PM MAIL WWW ICQ Skype YIM   Вверх
Unlocker
Дата 28.1.2009, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 2.11.2007
Где: Москва - Знаменск (Капустин Яр)

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



Нет никаких проблем для перехвата событий на контроле.
Порядок действий очень простой. 
не надо ничего переопределять.
1)ставишь прослушку сообщений о событиях
Код

this.PictureBox.MouseUp += new MouseEventHandler(SetZeroPoint);

2)определяешь реакцию на событие
Код

private void SetZeroPoint(object sender, MouseEventArgs e)
{
    ...
}

3)вырубаешь прослушку, когда необходимо
Код

this.PictureBox.MouseUp -= new MouseEventHandler(SetZeroPoint);


Практически тоже самое можно сделать и в дизайнере VS, но если надо управлять прослушкой сообщений гибко, т.е. от одинаковых событий действовать по-разному, то придется вручную управлять прослушкой и перенаправлением вызовов (callback). в остальном все прозрачно. если что-то неясно, то рекомендую книги Э. Троелсена, потому что там это хорошо и просто описано.
--------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b."
PM MAIL ICQ Skype GTalk Jabber   Вверх
jackfall
Дата 28.1.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



antikom, пробовал переопределять - не помогает.

Unlocker, это тоже не работает(

PM MAIL   Вверх
Unlocker
Дата 28.1.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 2.11.2007
Где: Москва - Знаменск (Капустин Яр)

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



Тогда код в студию. Я это сделал три дня назад, и это работало. 
+ требуются объяснения какие события нужны, как осуществляется проверка событий?
--------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b."
PM MAIL ICQ Skype GTalk Jabber   Вверх
jackfall
Дата 29.1.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну.. я незнаю..  поможет ли код компонента:

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace WindowsFormsApplication1
{
    public partial class FormSketch : UserControl
    {
        public FormSketch()
        {
            InitializeComponent();
        }

       Всякие переменные

       Публичные свойства с get, set

       может проблема в следующих методах? 

        private void buttonClose_MouseEnter(object sender, EventArgs e)
        {
           тоже код..
        }

        private void buttonClose_MouseLeave(object sender, EventArgs e)
        {
             тоже код..
        }

        private void panelBody_Paint(object sender, PaintEventArgs e)
        {
           тоже код..
        }

        private void buttonClose_BackColorChanged(object sender, EventArgs e)
        {
            тоже код..
        }

        private void labelLogo_ForeColorChanged(object sender, EventArgs e)
        {
            тоже код..
        } 
    }
}



Ну и там где я на форму поставил этот ЭУ такой вот обработчик к примеру (ну и в дезайнере стоит автоматически добавление обработчика на это):

Код

private void formSketch5_MouseClick(object sender, MouseEventArgs e)
        {
            код.. и сюда никогда не переходит управление((
        }



Это сообщение отредактировал(а) jackfall - 29.1.2009, 16:10
PM MAIL   Вверх
Unlocker
Дата 29.1.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 2.11.2007
Где: Москва - Знаменск (Капустин Яр)

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



Код смотреть надо в других местах.
1) Надо раскрыть код дизайнера (#region "InitializeComponents") и посмотреть какие события у каких компонентов объявлены на прослушку. Этот код тоже нужен.
2) Если ты хочешь создать событие, отличное от стандартных событий компонентов контрола, то надо прописать делегатов для данного вида событий, и непосредственно само событие.
В зависимости от пожеланий делаются разные манипуляции.
И, запомни, с дизайнером нужно работать по принципу: "доверяй, но проверяй".

--------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b."
PM MAIL ICQ Skype GTalk Jabber   Вверх
jackfall
Дата 29.1.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Unlocker, Свои события делал, это без проблем. научился)
а вот что тут такое непонятно(

В дизайнере есть

Код

this.formSketch5.MouseClick += new System.Windows.Forms.MouseEventHandler(this.formSketch5_MouseClick);


Это сообщение отредактировал(а) jackfall - 29.1.2009, 17:16
PM MAIL   Вверх
Unlocker
Дата 29.1.2009, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 2.11.2007
Где: Москва - Знаменск (Капустин Яр)

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



В таком случае могу посоветовать воспользоваться встроенным в студию дебаггером.
Если ничего не получится, то можешь залить на форум архив с проектом, постараюсь выяснить в чем дело.
--------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b."
PM MAIL ICQ Skype GTalk Jabber   Вверх
diadiavova
Дата 29.1.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



В прилагаемом проекте есть контрол, на который я бросил две панели. Клик по нижней панели вызывает событие "Click" самого контрола. В форме для него назначен обработчик.

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  EventImport.rar 53,32 Kb


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


Новичок



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

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



diadiavova, да, так работает. Но тогда если я хочу чтобы клик ЭУ происходил при нажатии на любой компонент в самом ЭУ  то так на все нужно сделать внутри него.. на кнопку, на панель, на надпись.. например.

Unlocker, Прикладываю пример... просто мой ЭУ (панель, надпись и кнопка) на форме.
событие
Код

  private void myUserControl1_MouseClick(object sender, MouseEventArgs e)
        {
            MessageBox.Show("Нажато!");
        }

не происходит. вобщем-то я догадываюсь почему.. В самом ЭУ ведь есть основа - MyUserControl. Видимо при вышеуказанном событии myUserControl1_MouseClick клик должен происходить по ней чтобы вызвалось, а она внизу.. под панелью. И поэтому наверно не происходит. Подскажите... может я чего-то просто не учел)

Это сообщение отредактировал(а) jackfall - 30.1.2009, 17:53

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  TempProject.7z 21,04 Kb
PM MAIL   Вверх
Unlocker
Дата 30.1.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 2.11.2007
Где: Москва - Знаменск (Капустин Яр)

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



Все верно, события клика не происходит, потому что клик идет по дочерним контролам.
Тут два варианта можно предложить:
1) сделать контролы прозрачными для взаимодействия, установив свойство 
Код

Control.Enabled = false;
 если обрабатывать события дочерних контролов не предполагается в принципе.
2) перехватывать события дочерних контролов и перенаправлять их форме UserControl. Этот вариант гибче, но сложнее, т.к. придется управлять самостоятельно перенаправлением обработчиков событий.
Все зависит от поставленной задачи и требований к ее выполнению по времени и функционалу.
--------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b."
PM MAIL ICQ Skype GTalk Jabber   Вверх
jackfall
Дата 30.1.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Unlocker, если enabled ставить false, то они и выглядят неактивными...

всем спасибо)

Это сообщение отредактировал(а) jackfall - 31.1.2009, 00:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




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


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

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