サブスクライブしたeventHandlerへの参照を維持するのが最善の方法である場合、これはディクショナリを使用して実現できます。
この例では、DataGridViewのセットにmergeColumnパラメーターを含めるために、無名メソッドを使用する必要があります。
enableパラメータをtrueに設定してMergeColumnメソッドを使用すると、イベントが有効になり、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);
}
}
}