Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Обработка событий, как сделать ?


Автор: StepS 16.5.2006, 14:06
Привет всем.
Задача: пишу например 
Код

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


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

Добавлено @ 14:09 
в некоторых событиях есть в ..KeyEventArgs свойство Handled = true; и обработка по цепочке не идет. А как быть с остальными событиями ?? 

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

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

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

        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?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)