Эта библиотека синтаксического анализа веса должна решить все подобные проблемы. Мне нравится библиотека, потому что ее довольно легко расширить.
Пример синтаксического анализа:
var caseOne = Date.parseDate("Jul 8, 2005", "M d, Y");
var caseTwo = Date.parseDate("2005-07-08", "Y-m-d");
И форматирование обратно в строку (вы заметите, что оба случая дают точно такой же результат):
console.log( caseOne.dateFormat("M d, Y") );
console.log( caseTwo.dateFormat("M d, Y") );
console.log( caseOne.dateFormat("Y-m-d") );
console.log( caseTwo.dateFormat("Y-m-d") );
Кажется, что если вы явно реализуете EventHandler
, вы не можете ссылаться на «Свойство» при запуске события. Вы должны обратиться в хранилище.
Какая ошибка? Я думаю, его ошибка переполнения стека, потому что вы вызываете add и remove на yourserlf (одно и то же событие). Также вы не можете поднять событие ACCESSOR.
Допустимый способ сделать это - создать резервное закрытое событие, которое будет добавлено и удалено из открытого доступа, и вы должны поднять это личное событие.
Данг, немного позднее.
При явном событии вам необходимо предоставить свой собственный резервный магазин - поле делегата или что-то вроде EventHandlerList
. Текущий код рекурсивный. Попробуйте:
private EventHandler itemsProcessed;
public event EventHandler ItemsProcessed
{
add
{
itemsProcessed-= value;
itemsProcessed+= value;
}
remove
{
itemsProcessed-= value;
}
}
Затем (и отмечая, что я little осторожно относится к «о том, чтобы повернуть null
» резьбу по краю]:
var snapshot = itemsProcessed;
if(snapshot != null) snapshot(this, EventArgs.Empty);
С более поздними версиями C # это можно упростить:
itemsProcessed?.Invoke(this, EventArgs.Empty);
protected virtual void OnItemsProcessed() => itemsProcessed?.Invoke(this, EventArgs.Empty);
- выполненная работа, и нет необходимости раскрывать доступ к полю
– Marc Gravell♦
2 August 2017 в 10:01
OnMouseWheel
, который, возможно, выполняет исходное связанное событие Control.MouseWheel
... и я не могу без отключения прокрутки. Действительно расстраивает. Прокрутка мыши - одна из тех странных полуавтоматических вещей.
– Nyerguds
3 August 2017 в 16:51
Я не могу сказать из вашего поста, если вы пытаетесь поднять событие из производного класса или нет, но я обнаружил, что вы не можете определить событие в базовом классе, а затем поднять его (непосредственно) в производном классе, по какой-то причине это пока не совсем ясно.
Итак, я определяю защищенные функции в базовых классах для повышения событий (которые определены в этих базовых классах), например:
// The signature for a handler of the ProgressStarted event.
// title: The title/label for a progress dialog/bar.
// total: The max progress value.
public delegate void ProgressStartedType(string title, int total);
// Raised when progress on a potentially long running process is started.
public event ProgressStartedType ProgressStarted;
// Used from derived classes to raise ProgressStarted.
protected void RaiseProgressStarted(string title, int total) {
if (ProgressStarted != null) ProgressStarted(title, total);
}
Затем в производном классе я вызываю RaiseProgressStarted (название, итого) вместо вызова ProgressStarted (название, итого).
Похоже, это длинный путь. Возможно, кто-то еще знает, как лучше справиться с этой проблемой.