Не могу отключить реакцию на события!!!
От: Vasyaga  
Дата: 03.03.05 02:56
Оценка:
Всем привет! Вопрос следующего содержания: пусть у нас есть кнопка Button, на ее событии Click уже висит несколько делегатов, причем заранее неизвестно каких. Задача — временно отключить обработчик Click, а потом включить. Следующая конструкция не работает:
    button1.Click = null;

Если можно обойти наследование то было бы круто!
-=Не бойтесь совершенства, ибо оно Вам не грозит! (С. Дали)=-
Re: Не могу отключить реакцию на события!!!
От: ussr  
Дата: 03.03.05 07:01
Оценка: -1
Здравствуйте, Vasyaga, Вы писали:

V>Всем привет! Вопрос следующего содержания: пусть у нас есть кнопка Button, на ее событии Click уже висит несколько делегатов, причем заранее неизвестно каких. Задача — временно отключить обработчик Click, а потом включить. Следующая конструкция не работает:

V>
V>    button1.Click = null;
V>

V>Если можно обойти наследование то было бы круто!

также, как и подписывались, только += замените на -=
Re[2]: Не могу отключить реакцию на события!!!
От: Vasyaga  
Дата: 03.03.05 07:21
Оценка:
Здравствуйте, ussr, Вы писали:

U>также, как и подписывались, только += замените на -=


Это понятно, но я же сказал, что мне заранее неизвестно, какие обработчики уже подключены, то есть мое приложение динамически подгружает те самые onclick... А вот как их выгрузить — непонятно. В идеале мне необходимо не только выгружать(отключать) их, но и сохранять.
В общем лучше объясню поподробнее:
Есть некое меню, в нем итемы — это динамически подгружаемые объекты со своими обработчиками onclick. Моя задача сделать это меню настраиваемым, то есть работающим в 2-х режимах:
    1) Обычный режим (срабатывает onclick)
    2) Режим Customize (onclick не работает, можно удалять itemы, добавлять новые из списка команд)
Надеюсь теперь будет понятнее...
-=Не бойтесь совершенства, ибо оно Вам не грозит! (С. Дали)=-
Re: Не могу отключить реакцию на события!!!
От: DuШes  
Дата: 03.03.05 07:32
Оценка:
Здравствуйте, Vasyaga, Вы писали:

V>Всем привет! Вопрос следующего содержания: пусть у нас есть кнопка Button, на ее событии Click уже висит несколько делегатов, причем заранее неизвестно каких. Задача — временно отключить обработчик Click, а потом включить. Следующая конструкция не работает:

V>
V>    button1.Click = null;
V>

V>Если можно обойти наследование то было бы круто!

Delegate.RemoveAll
Re[2]: Не могу отключить реакцию на события!!!
От: Mika Soukhov Stock#
Дата: 03.03.05 08:02
Оценка: +1
Здравствуйте, DuШes, Вы писали:

DШ>Delegate.RemoveAll


Так просто не получиться. Нужно вытащить значение свойства Control.Events, у него получить делегат по ключу, отвечающий за собитие Control.Click, и у последнего вызвать Delegate.RemoveAll
Re[3]: Не могу отключить реакцию на события!!!
От: Igor Trofimov  
Дата: 03.03.05 10:59
Оценка:
V>Это понятно, но я же сказал, что мне заранее неизвестно, какие обработчики уже подключены, то есть мое приложение динамически подгружает те самые onclick... А вот как их выгрузить — непонятно. В идеале мне необходимо не только выгружать(отключать) их, но и сохранять.

В общем, что-то у вас не так в консерватории...

Подумай, как эту нехорошую картину, которую ты хочешь — нарисовать по-другому.
Тот метод, который ты (да и я в свое время) использовал в Delphi — оторвал обработчик, сохранил, сделал свои грязные делишки, прицепил обратно — он все-таки плох принципиально. Тебе это раньше, до C# в голову не приходило? Мне — приходило.

Вариант как правильнее — сделать у истчника события (контрола?) методы BeginUpdate/EndUpdate или что-то в этом роде.
Re[4]: Не могу отключить реакцию на события!!!
От: GarryIV  
Дата: 03.03.05 11:19
Оценка:
Hello, Igor!

V>> Это понятно, но я же сказал, что мне заранее неизвестно, какие

V>> обработчики уже подключены
, то есть мое приложение динамически
V>> подгружает
те самые onclick... А вот как их выгрузить — непонятно.
V>> В идеале мне необходимо не только выгружать(отключать) их, но и
V>> сохранять.

IT> В общем, что-то у вас не так в консерватории...


IT> Подумай, как эту нехорошую картину, которую ты хочешь — нарисовать

IT> по-другому. Тот метод, который ты (да и я в свое время) использовал в
IT> Delphi — оторвал обработчик, сохранил, сделал свои грязные делишки,
IT> прицепил обратно — он все-таки плох принципиально. Тебе это раньше, до
IT> C# в голову не приходило? Мне — приходило.

IT> Вариант как правильнее — сделать у истчника события (контрола?) методы

IT> BeginUpdate/EndUpdate или что-то в этом роде.

Этот метод имеет один недостаток — надо создавать наследников для всех контролов для которых нужна такая функциональность. Что зачастую неприемлимо. Как альтернативу можно сделать некий враппер, который будет ловить onclick (или другие события) и в зависимости от своего состояния (enabled\disabled) будет вызывать или не вызывать нужные обработчики.
Posted via RSDN NNTP Server 1.9
WBR, Igor Evgrafov
Не могу отключить реакцию на события!!!
От: Аноним  
Дата: 03.03.05 04:51
Оценка:
button1.Click -= new System.EventHandler(this.button1_Click);
С/у Дмитрий.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Не могу отключить реакцию на события!!!
От: Аноним  
Дата: 03.03.05 05:05
Оценка:
И в догонку: сделайте в классе WinForm или как у Вас там boolean переменную, и смотрите там значение. Если false — не исполняем, если true — исполняем. Грубо, но действенно.
А вначале, когда ничего не было, всё было так...
Не настоящий программист тот кодер, кто не форматнул диск из кода.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Не могу отключить реакцию на события!!!
От: Аноним  
Дата: 03.03.05 05:23
Оценка:
Или создайте свое событие, где регистрация каждого делегата контролируется вручную.

public event EventHandler myClick
{
add
{
}
remove
{
}
}
Что-то типа того...
С/у Дмитрий.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
RE: Не могу отключить реакцию на события!!!
От: Аноним  
Дата: 03.03.05 07:41
Оценка:
Всем привет! Вопрос следующего содержания: пусть у нас есть кнопка Button, на ее событии Click уже висит несколько делегатов, причем заранее неизвестно каких. Задача — временно отключить обработчик Click, а потом включить. Следующая конструкция не работает:

button1.Click = null;
Если можно обойти наследование то было бы круто!

this.ButtonSearch.Click += new System.EventHandler(this.ButtonSearch_Click);
назначить событие

this.ButtonSearch.Click -= new System.EventHandler(this.ButtonSearch_Click);
убрать событие


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Не могу отключить реакцию на события!!!
От: Аноним  
Дата: 03.03.05 09:27
Оценка:
У Вас есть доступ к коду кнопки? Либо возможность наследоваться?
Иначе боюсь, что в лоб эту задачу не решить. Правда можно поизвращаться с рефлексией. Но что-то
мне подсказывает, что Вы в корне выбрали не тот подход.
Если Вы сами разработываете менюшку, то имеете доступ к процессу регистрации делегатов. Ну и запихивайте их в коллекцию, и пользуйте как душе угодно...
С/у Дмитрий.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Не могу отключить реакцию на события!!!
От: Аноним  
Дата: 03.03.05 11:28
Оценка:
Тогда копайте в сторону IExtenderProvider
С/у Дмитрий.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: Не могу отключить реакцию на события!!!
От: ddaa Россия  
Дата: 03.03.05 14:32
Оценка:
Здравствуйте, Vasyaga, Вы писали:

V>Это понятно, но я же сказал, что мне заранее неизвестно, какие обработчики уже подключены, то есть мое приложение динамически подгружает те самые onclick... А вот как их выгрузить — непонятно. В идеале мне необходимо не только выгружать(отключать) их, но и сохранять.


А нельзя создать свой класс события, регулировать подписывание и отписывание на него самому, а на Button.OnClick повесить только возбуждение вашего события?
Re[5]: Не могу отключить реакцию на события!!!
От: Igor Trofimov  
Дата: 03.03.05 20:26
Оценка:
GIV>Этот метод имеет один недостаток — надо создавать наследников для всех контролов для которых нужна такая функциональность. Что зачастую неприемлимо.

Или лень.
Re[6]: Не могу отключить реакцию на события!!!
От: GarryIV  
Дата: 04.03.05 05:20
Оценка:
Hello, Igor!

GIV>> Этот метод имеет один недостаток — надо создавать наследников для

GIV>> всех контролов для которых нужна такая функциональность. Что зачастую
GIV>> неприемлимо.

IT> Или лень.


Тебе видней
Posted via RSDN NNTP Server 1.9
WBR, Igor Evgrafov
Re[3]: Не могу отключить реакцию на события!!!
От: DuШes  
Дата: 04.03.05 06:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У Вас есть доступ к коду кнопки? Либо возможность наследоваться?

А>Иначе боюсь, что в лоб эту задачу не решить. Правда можно поизвращаться с рефлексией. Но что-то
А>мне подсказывает, что Вы в корне выбрали не тот подход.
А>Если Вы сами разработываете менюшку, то имеете доступ к процессу регистрации делегатов. Ну и запихивайте их в коллекцию, и пользуйте как душе угодно...

А>
данное сообщение получено с www.gotdotnet.ru

А>ссылка на оригинальное сообщение


Думая наврядли автор имеет доступ к кнопке, тогда не что бы ему наверно не помешало бы использовать конструкцию Add|Remove при объявлении события...
Re: Не могу отключить реакцию на события!!!
От: Stewe  
Дата: 04.03.05 06:52
Оценка:
Здравствуйте, Vasyaga, Вы писали:

V>Всем привет! Вопрос следующего содержания: пусть у нас есть кнопка Button, на ее событии Click уже висит несколько делегатов, причем заранее неизвестно каких. Задача — временно отключить обработчик Click, а потом включить. Следующая конструкция не работает:

V>
V>    button1.Click = null;
V>

V>Если можно обойти наследование то было бы круто!

Смешной вариант решения: создать вторую такую же кнопку, без обработчиков событий, и, когда надо отключить обработчик делать ее видимой, а исходную невидимой. И наоборот.
Re[2]: Не могу отключить реакцию на события!!!
От: Vasyaga  
Дата: 04.03.05 10:28
Оценка:
Здравствуйте, Stewe, Вы писали:
S>Смешной вариант решения: создать вторую такую же кнопку, без обработчиков событий, и, когда надо отключить обработчик делать ее видимой, а исходную невидимой. И наоборот.
Да уж, смешно... Это из области темы как memset из С++ перегнать в С№...
А по поводу того, что у меня нет доступа к protected членам кнопки или менюитема, то так оно и есть, естессно...
В общем из всей информации я понял одно: без наследования не обойтись. Ну и ладно, конечно в лоб хотелось решить
Придется превозмогать лень...
-=Не бойтесь совершенства, ибо оно Вам не грозит! (С. Дали)=-
Re[3]: Не могу отключить реакцию на события!!!
От: Vasyaga  
Дата: 04.03.05 10:31
Оценка:
Здравствуйте, Vasyaga, Вы писали:

V>Здравствуйте, Stewe, Вы писали:

S>>Смешной вариант решения: создать вторую такую же кнопку, без обработчиков событий, и, когда надо отключить обработчик делать ее видимой, а исходную невидимой. И наоборот.
V>Да уж, смешно... Это из области темы как memset из С++ перегнать в С№...
V>А по поводу того, что у меня нет доступа к protected членам кнопки или менюитема, то так оно и есть, естессно...
V>В общем из всей информации я понял одно: без наследования не обойтись. Ну и ладно, конечно в лоб хотелось решить
V>Придется превозмогать лень...

Млин, PuntoSwitcher... Я имел в виду C#
-=Не бойтесь совершенства, ибо оно Вам не грозит! (С. Дали)=-
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.