Я пытаюсь написать надстройку COM для Excel XP на C #, которая отключает двойной щелчок по ячейке, чтобы отредактировать ее.
Я хочу открыть окно с сообщением, что редактирование ячейки таким образом запрещено, и затем остановить все выполнение.
Просматривая документацию в Microsoft, это кажется очень простой задачей: вы создаете событие Application AppEvents_SheetBeforeDoubleClickEventHandler
с подписью func(object sheet, Range Target, ref bool Cancel)
и устанавливаете для Cancel
значение true, чтобы выполнение прекращалось.
У меня есть следующее:
public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
Excel.Application app = application as Excel.Application;
app.SheetBeforeDoubleClick += Excel.AppEvents_SheetBeforeDoubleClickEventHandler(beforeDoubleClick);
}
void beforeDoubleClick(object sheet, Excel.Range Target, ref bool Cancel)
{
MessageBox.Show("Cannot edit cells this way sorry.");
Cancel = true;
}
Отображается окно сообщения, но затем ячейка переводится в режим редактирования, однако, если у меня то же самое из VBA, оно работает.
То же самое происходит с надстройкой VB.NET с использованием следующего кода.
Private WithEvents app As Excel.Application
Public Sub OnConnection(ByVal application As Object,
ByVal connectMode As Extensibility.ext_ConnectMode,
ByVal addInInst As Object,
ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnConnection
app = application
End Sub
Sub Worksheet1_BeforeDoubleClick(ByVal obj As Object,
ByVal Target As Excel.Range,
ByRef Cancel As Boolean)
Handles app.SheetBeforeDoubleClick
MsgBox("Double-clicking in this sheet is not allowed.")
Cancel = True
End Sub