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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка событий, как сделать ? Общие принципы 
:(
    Опции темы
StepS
  Дата 16.5.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

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



Привет всем.
Задача: пишу например 
Код

.....
obj.Click += new .....(myClick);
....
private void myClick(....){
....
}


как сделать так чтоб на Click отрабатывало только мое сообщение ? НАпример если obj это DataGrid и я хочу просто выделить строку и не позволять редактировать ячейку ? То же самое отноститься и к другим типам ?
Можно ли такое сделать ?

Добавлено @ 14:09 
в некоторых событиях есть в ..KeyEventArgs свойство Handled = true; и обработка по цепочке не идет. А как быть с остальными событиями ?? 
PM MAIL ICQ   Вверх
arilou
Дата 16.5.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



StepS, такая фигня присутствует только там, где разработчик события это заложил. Обычно проблемы такого рода решаются наследованием от класса и переопределением поведения соотв. методов
 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 18.5.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Создаём свой класс-наследник DataGrid, и его кидаем на форму вместо стандартного грида. В классе-наследнике перекрываем метод OnClick и там выполняем всё что нужно, кроме base.OnClick. 


--------------------
user posted image
PM MAIL WWW   Вверх
lioness
Дата 27.11.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Другой подходящей темы по поводу событий не нашла. 
Может быть, нужно совсем по-другому сделать.
Я генерирую сама несколько табличек одна за другой (любое количество) и соединяю их на одной форме.
Код

        private void Tables_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < number; i++)
            {
                tb = new table();
                tb.DataGrid.Location = new System.Drawing.Point(tb.DataGrid.Location.X, btnNewList.Location.Y+btnNewList.Height+ tb.DataGrid.Location.Y + tb.ClientSize.Height*i);
                tb.Button1.Location = new System.Drawing.Point(tb.Panel.Location.X + tb.Button1.Location.X, btnNewList.Location.Y + btnNewList.Height + tb.Panel.Location.Y + tb.Button1.Location.Y + tb.ClientSize.Height * i);
                tb.Button2.Location = new System.Drawing.Point(tb.Panel.Location.X + tb.Button2.Location.X, btnNewList.Location.Y + btnNewList.Height + tb.Panel.Location.Y + tb.Button2.Location.Y + tb.ClientSize.Height * i);
                tb.Button3.Location = new System.Drawing.Point(tb.Panel.Location.X + tb.Button3.Location.X, btnNewList.Location.Y + btnNewList.Height + tb.Panel.Location.Y + tb.Button3.Location.Y + tb.ClientSize.Height * i);
                tb.lblListNo.Location = new System.Drawing.Point(tb.lblListNo.Location.X, btnNewList.Location.Y + btnNewList.Height + tb.lblListNo.Location.Y + tb.ClientSize.Height * i);
                tb.Panel.Location = new System.Drawing.Point(tb.Panel.Location.X, btnNewList.Location.Y + btnNewList.Height + tb.Panel.Location.Y + tb.ClientSize.Height * i);
                tb.PictureBox.Location = new System.Drawing.Point(tb.PictureBox.Location.X, btnNewList.Location.Y + btnNewList.Height + tb.PictureBox.Location.Y + tb.ClientSize.Height * i);
                this.Controls.Add(tb.Button1);
                this.Controls.Add(tb.Button2);
                this.Controls.Add(tb.Button3);
                this.Controls.Add(tb.DataGrid);
                this.Controls.Add(tb.lblListNo);
                this.Controls.Add(tb.Panel);
                this.Controls.Add(tb.PictureBox);

                tabs.Add(tb);

            }

            this.ResumeLayout(false);

Все три кнопки каждой таблички работают просто и замечательно, кнопками редактируются.  Мне, вроде бы, так было удобно. Теперь я хотела организовать двойной щелчок на "PictureBox" и по tabs-у проверить координаты мышки проверить, которую табличку из ряда я пометила (хотела квадратик поставить).
А по Mousedoubleclick я НЕ прихожу на прерыв в основной форме. Совсем не бываю там после двойного щелчка. Я могу отловить это events только в классе для каждой отдельной таблички. Может, я плохо объединила их на форме? Или мне надо PictureBox вытаскивать из класса table?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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