События типа неделегата

Это - флажок, который Вы не можете изменить:

<input type="checkbox" disabled="disabled" checked="checked">

Просто добавляют disabled="disabled" как атрибут.


Редактирование для обращения к комментариям:

, Если Вы хотите, чтобы данные были отправлены назад, чем, простые решения должны применить то же имя к скрытому входу:

<input name="myvalue" type="checkbox" disabled="disabled" checked="checked"/>
<input name="myvalue" type="hidden" value="true"/>

Таким образом, когда флажок установлен на 'отключенный', это только, служит цели визуального представления данных, вместо того, чтобы на самом деле быть 'связанным' с данными. В сообщении назад, отправляется значение скрытого входа, когда флажок отключен.

5
задан abatishchev 12 August 2012 в 08:49
поделиться

4 ответа

Если вы хотите иметь возможность добавлять и удалять объекты CustomEvent из события ( вместо обычных делегатов) есть два варианта:

Сделать неявное приведение от ICustomEvent к EventHandler (или другому делегату), которое возвращает метод экземпляра ICustomEvent (возможно, Invoke), затем использовать свойство Target делегата, чтобы получить исходный ICustomEvent в добавить и удалить аксессоры.

РЕДАКТИРОВАТЬ : Примерно так:

CustomEvent myEvent;
public event EventHandler MyEvent {
    add {
        if (value == null) throw new ArgumentNullException("value");
        var customHandler = value.Target as ICustomEvent;

        if (customHandler != null)
            myEvent = myEvent.Combine(customHandler);
        else
            myEvent = myEvent.Combine(value);   //An ordinary delegate
    }
    remove {
        //Similar code
    }
}

Обратите внимание, что вам все еще нужно выяснить, как добавить первый обработчик, если это делегат (если поле myEvent имеет значение null )


Сделайте свойство типа CustomEvent доступным для записи,затем перегрузите операторы + и - , чтобы разрешить + = и - = для свойства.

EDIT : Чтобы ваши вызывающие абоненты не перезаписывали событие, вы можете выставить предыдущее значение в CustomEvent (я предполагаю, что оно работает как неизменяемый стек ), а в установщике добавить

if (myEvent.Previous != value && value.Previous != myEvent)
    throw new ArgumentException("You cannot reset a CustomEvent", "value");

Обратите внимание, что когда последний обработчик удален, оба value и myEvent.Previous будут null .

оба value и myEvent.Previous будут null .

оба value и myEvent.Previous будут null .

2
ответ дан 14 December 2019 в 04:45
поделиться

Попробуйте следующее:

CustomEvent myEvent

public event EventHandler MyEvent {
    add { myEvent = myEvent.Combine(value); }
    remove {myEvent = myEvent.Remove(value); }
}

Вы можете добавлять и удалять обычные делегаты EventHandler, и он выполнит аксессоры add и remove .


РЕДАКТИРОВАТЬ : Вы можете найти реализацию слабого события здесь .
2 и РЕДАКТИРОВАТЬ : Или здесь .

5
ответ дан 14 December 2019 в 04:45
поделиться

Что вы пытаетесь сделать, чего нельзя использовать делегаты / events for?

Это кричит Новое изобретение квадратного колеса (внизу страницы) , но с таким же успехом я мог не понимать проблему.

1
ответ дан 14 December 2019 в 04:45
поделиться

Почему не пытаетесь ли вы использовать операторы «+ =» и «- =» в своем классе CustomEvent? Вы не можете напрямую переопределить операторы «+ =» и «- =», но они оцениваются операторами «+» и «-».

Операторы присваивания не могут быть перегружены, но + =, например, оценивается с использованием +, который может быть перегружен.

http://msdn.microsoft.com/en-us/library/8edha89s (VS.90) .aspx

Таким образом, вместо событийно-подобных методов добавления и удаления вы может иметь поле или свойство, которые можно комбинировать с помощью операторов + = и - =. Кроме того, он инкапсулирует логику комбинирования внутри вашего собственного класса CustomEvent.

Carlos Loth.

0
ответ дан 14 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: