Давайте создадим ListObject
и прикрепить событие на нем, как MSDN объяснить здесь: https://msdn.microsoft.com/en-us/library/eyfs6478.aspxКопировать/вставить ListObject первенствует потерять присоединенные события
Кодекса
В надстройку на уровне приложений, код будет выглядеть выше:
Worksheet worksheet = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
Excel.Range cell = worksheet.Range["$A$1:$D$4"];
ListObject list1 = worksheet.Controls.AddListObject(cell, "list1");
list1.Selected += list1_SelectedDeselected;
list1.Deselected += list1_SelectedDeselected;
с чем-то в этом роде, чтобы увидеть запускаемые события:
private void list1_SelectedDeselected(Excel.Range Target)
{
Worksheet worksheet = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
Excel.Range cell = worksheet.Range["$A$6"];
if (cell.Value2 == "foo")
{
cell.Value2 = "bar";
}
else
{
cell.Value2 = "foo";
}
}
Странное поведение Если запустить этот код внутри надстройки в Excel, вы увидите, что это и что
Если вы вырезать/вставить эту таблицу в тот же рабочий лист, все связанные события будут активированы.
Но если вы вырезать/вставить в другой лист, события не будут прикреплены больше к ListObject.
Есть ли причина, по которой я не знаю этого непредсказуемого поведения?
Вы говорите, что фактический объект, носящий событие, связан с объектом ListObject, прикрепленным к листу, поэтому, если я вырезал ListObject во время выполнения, чтобы вставить его на новый лист, это легкая копия созданного объекта ListObject, поэтому мы проиграть события. Это оно? – enguerran