Java: статическая абстракция (снова) - лучшая практика, как обойти

Если лучший способ сохранить ссылку на подписанный eventHandler, это может быть достигнуто с помощью словаря.

В этом примере я должен использовать анонимный метод для включения параметра mergeColumn для набор DataGridViews.

Использование метода MergeColumn с параметром enable, установленным в true, позволяет событию при его использовании с false отключает его.

static Dictionary<DataGridView, PaintEventHandler> subscriptions = new Dictionary<DataGridView, PaintEventHandler>();

public static void MergeColumns(this DataGridView dg, bool enable, params ColumnGroup[] mergedColumns) {

    if(enable) {
        subscriptions[dg] = (s, e) => Dg_Paint(s, e, mergedColumns);
        dg.Paint += subscriptions[dg];
    }
    else {
        if(subscriptions.ContainsKey(dg)) {
            dg.Paint -= subscriptions[dg];
            subscriptions.Remove(dg);
        }
    }
}
24
задан Community 23 May 2017 в 12:10
поделиться