Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / rising an event invokes the event handler through a delegate ? + / 19 сообщений из 19, страница 1 из 1
14.07.2004, 03:57
    #32602855
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
...
    clmn.DoubleClick   += new System.EventHandler (this.clmn_DoubleClick);
    clmn.KeyUp   += new KeyEventHandler (this.clmn_KeyUp);
 ....


   private void 
   clmn_DoubleClick (object sender, System.EventArgs e)
   {
       //MouseEventArgs me = (MouseEventArgs)e ;// ----------------------------------------
 
       Console.WriteLine("ut.ClmnWin.DoubleClick: {0}", e);
   }

   private void 
   clmn_KeyUp (object sender, KeyEventArgs e)
   {
         Console.WriteLine("ut.ClmnWin.KeyUp: keyCode {0}  {1} {2}", e.KeyCode, Keys.Enter, Keys.Return);
     if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) {
         Console.WriteLine("ut.ClmnWin.KeyUp: 1");
//       OnDoubleClick(new MouseEventArgs(MouseButtons.Left,  1 , 1 , 1 , 0 ));
         OnDoubleClick(new EventArgs());
     }
   }


вот если нажать даблклик, то вызывается ивент хандлер clmn_DoubleClick.
если нажать ентер, то управление проходит через OnDoubleClick(new EventArgs()); но ивент хандлер clmn_DoubleClick не вызывается.

что не правильно?
...
Рейтинг: 0 / 0
14.07.2004, 05:03
    #32602859
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
Привет старой школе :), перескакиваешь на новые рельсы? :)

А как обьявлен OnDoubleClick?


Magnus
...
Рейтинг: 0 / 0
14.07.2004, 16:18
    #32604337
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
IMHO clmn и this разные вещи,

this.OnDoubleClick испускает event DoubleClick из this, а вы ловите его на clmn
...
Рейтинг: 0 / 0
14.07.2004, 16:44
    #32604446
viper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
Совершенно правильно, скудова форме знать кому сей евент отрабатывать? Вот по умолчанию и на обработчик формы тулит
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
15.07.2004, 01:41
    #32604979
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
согласен
даблклик попадал в отработчик формы, но не контрола clmn.
следующий вопрос: onDoubleClick имеет описатель protected.
вот так обошел
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
 
public class ut_ListBox : ListBox {
   public void onDCLick (  EventArgs e)    {  OnDoubleClick (e);}  //  < -----------------------------------
 
   
 }

 public class ClmnWin: System.Windows.Forms.Form  {
   private     ut_ListBox clmn;             //< ----------------------------------------------
 

.....
   private void 
   clmn_KeyUp (object sender, KeyEventArgs e)
   {
//         Console.WriteLine("ut.ClmnWin.KeyUp: keyCode {0}  {1} {2}", e.KeyCode, Keys.Enter, Keys.Return);
     if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) {
         if(CNST._debug) 
           Console.WriteLine("ut.clmn.KeyUp: 1");
//         OnDoubleClick(new EventArgs());

         clmn.onDCLick(new EventArgs());     //< -----------------------------------------
 
     }
     else if (e.KeyCode == Keys.Escape) {
         if(CNST._debug) 
           Console.WriteLine("ut.clmn.KeyUp: esc");
         clmn.SelectedIndex = - 1 ;
         Close();
     }
   }

....
}

но не покидает ощущение, что это извращение.
а как нормальные люди пишут?

M23
с возвращением.
перескакиваешь на новые рельсы -- это в корне не правильная формулировка.
при развитом социализме учили, что коммунизм - это не состояние, это бесконечный процесс.
;-)))))
перескакивание из пред.рельсов на след. не возможно, по причине не стояния на пред. рельсах.
...
Рейтинг: 0 / 0
15.07.2004, 02:25
    #32604989
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
А ты разве на сях не писал?
Оригинал-ный мелкомягкий вопрос: А зачем такие сложности? Начал-ная идея какова? Чего сделать то нужно? Уверен что есть еще несколько других путей.

Magnus
...
Рейтинг: 0 / 0
15.07.2004, 10:54
    #32605336
viper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
Ну вообщем, если не зацикливаться на определенной задаче, то реально единственный способ зацепиться за protected член это наследоваться от класса который его содержит или создать friend класс, звучит как извращение но таковы принципы ООП...
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
16.07.2004, 00:13
    #32607165
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
писал на сях большую часть жизни.
идея наверно такая.
есть два устройства ввода. мышь и клава.
одно типа главное - на его события вешается вся обработка.
а события второго вызывают соответствующие события первого.

viper
в результате имеем вместо нагромождения операторов - нагромождение классов.
...
Рейтинг: 0 / 0
16.07.2004, 01:37
    #32607182
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
А зачем мы ты в таком случае привязываешься именно к обработчикам. Тебе ведь нужны не они сами а их код, вот и помести его в отдельный метод и вызывай. Тот же вызов в самих обработчиках. Или я чего то не понял?

Magnus
...
Рейтинг: 0 / 0
16.07.2004, 01:50
    #32607184
чингиз
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
все ты понял.
обработчик это и есть подпрограмма. (точнее процесс, так как вызывается асинхронно)
чем создание еще одной подпрограммы отличается от создания еще одного класса?

пысы
петзольд с растопыренными пальцами меня так учил делать.
и в павербилдере было так принято делать.
...
Рейтинг: 0 / 0
16.07.2004, 10:41
    #32607489
viper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
tchingiz
viper
в результате имеем вместо нагромождения операторов - нагромождение классов.

Согласен, не очень прикольно получаеться, но были же какие то причины сделать OnDoubleClick протектед, и сомневаюсь что это поменяеться, а значит надо выкручиваться...
...
Рейтинг: 0 / 0
17.07.2004, 03:10
    #32609166
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
Так. Все равно нифига не понял.
Все это как то не так.
А если понадобится чтобы обрабочики отличались? Хоть сообщение другое к примеру. Придется еще дальше мутить.
Они ж ведь в одном классе? Так почему не сделать так:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  
   private void clmn_DoubleClick (object sender, System.EventArgs e){
       Console.WriteLine("ut.ClmnWin.DoubleClick: {0}", e);
       Dowork();
   }

   private void clmn_KeyUp (object sender, KeyEventArgs e){
     if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) {
         Console.WriteLine("ut.ClmnWin.KeyUp: 1");
         Dowork();
     }
   }
   
   private void Dowork(){
         //do everything you want
   }   



Magnus
...
Рейтинг: 0 / 0
17.07.2004, 04:30
    #32609169
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
млин.
все ты понял. так тоже можно. и может даже так лучше.
по поводу вызова другого прерывания - я же только факт констатирую,
меня так учили микрософты(дескать передовой метод передовой работы), я так привык, а теперь в ихнем передовом языке так делать неудобно.
я думал(скромно надеясь на совместимость m$ стиля) есть способ вызывать обработчики по правильному.

минусы по твоему.
функций DoWork - на деле будет несколько(надо исскуственно оформлять несколько программ и лазить в них смотреть), а класс с открытыми OnXXXXX - один (и лазить туда не надо. разве что добавлять OnXXXX - методы).

плюсы
наверно тоже есть.
ну вот и все.
...
Рейтинг: 0 / 0
17.07.2004, 05:21
    #32609170
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
Ok. Минусы есть в обоих методах.
На мой вгляд прямые обработчики событий затем и были сделаны протектед чтоб их нетрогали лишний раз :). Я может и не прав, у тебя то опыта все ж поболе, но я их и не трогаю, все что нужно оформляю своим кодом.

Если мне нужно вызывать те же методы из разных мест - делаю отдел-ный класс со всему служебными функциями вплоть до синглтона и делай с ним что хош :)


Magnus
...
Рейтинг: 0 / 0
17.07.2004, 05:45
    #32609171
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
Magnus23
На мой вгляд прямые обработчики событий затем и были сделаны протектед чтоб их нетрогали лишний раз :).
....
вплоть до синглтона



1
прямо шерлок холмс. :))
синглтон - шошо?
2
скажи плиз на пальцах, глубокий смысл invoke ?
...
Рейтинг: 0 / 0
17.07.2004, 06:36
    #32609172
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
Вот я никогда не могу разобрать, когда ты с меня прикалываешься а когда нет :)
Я имел ввиду что если уж он сделан протектед то с каким то скрытым смыслом, который я понимаю как отправную точку для ивент-драйвен приложений и незачем заниматся акупунктурой дергая эти точки когда в этом нет необходимости :)


Чингизсинглтон - шошо?
Вот о том я и говорю(см. выше), подозреваю что кто-то кому-то щас будет читать лекцию :)

авторскажи плиз на пальцах, глубокий смысл invoke ?
У меня уже полчетвертого ночи и я уже нифига не соображаю. Xто такой invoke? :)




Magnus
...
Рейтинг: 0 / 0
21.07.2004, 23:00
    #32615877
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
я понимаю, что раз сделали протектед, то не для того, что бы использовать снаружи.
сшарп поставил две недели назад, про синглтон слышу в первый раз. в таком контексте. не понял, что ты написал.


Invoke (inherited from Control) Overloaded.
Executes a delegate on the thread that
owns the control's underlying window handle.
??
...
Рейтинг: 0 / 0
21.07.2004, 23:01
    #32615878
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
invoke - во многих контролах встречается.
...
Рейтинг: 0 / 0
21.07.2004, 23:52
    #32615894
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rising an event invokes the event handler through a delegate ? +
Ага, теперь начинает прояснятся :).
Синглтон - вобщем то статический клалл имеющий только статические методы. О формулировке можно поспорить но смысл примерно такое(и одна из реализаций).

На счет Invoke , чесно, не знал. И никогда не пользовался.
Все таки в чем его глубокий смысл? :). ПОдозреваю что все таки не для прямых вызовов это сделано, а для использования при наследовании.

Magnus
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / rising an event invokes the event handler through a delegate ? + / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]