Это - флажок, который Вы не можете изменить:
<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"/>
Таким образом, когда флажок установлен на 'отключенный', это только, служит цели визуального представления данных, вместо того, чтобы на самом деле быть 'связанным' с данными. В сообщении назад, отправляется значение скрытого входа, когда флажок отключен.
Если вы хотите иметь возможность добавлять и удалять объекты 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
. Попробуйте следующее:
CustomEvent myEvent
public event EventHandler MyEvent {
add { myEvent = myEvent.Combine(value); }
remove {myEvent = myEvent.Remove(value); }
}
Вы можете добавлять и удалять обычные делегаты EventHandler, и он выполнит аксессоры add
и remove
.
РЕДАКТИРОВАТЬ : Вы можете найти реализацию слабого события здесь .
2 и РЕДАКТИРОВАТЬ : Или здесь .
Что вы пытаетесь сделать, чего нельзя использовать делегаты / events for?
Это кричит Новое изобретение квадратного колеса (внизу страницы) , но с таким же успехом я мог не понимать проблему.
Почему не пытаетесь ли вы использовать операторы «+ =» и «- =» в своем классе CustomEvent? Вы не можете напрямую переопределить операторы «+ =» и «- =», но они оцениваются операторами «+» и «-».
Операторы присваивания не могут быть перегружены, но + =, например, оценивается с использованием +, который может быть перегружен.
http://msdn.microsoft.com/en-us/library/8edha89s (VS.90) .aspx
Таким образом, вместо событийно-подобных методов добавления и удаления вы может иметь поле или свойство, которые можно комбинировать с помощью операторов + = и - =. Кроме того, он инкапсулирует логику комбинирования внутри вашего собственного класса CustomEvent.
Carlos Loth.