【发布时间】:2010-10-13 04:36:25
【问题描述】:
我正在尝试用 C# 为 Excel XP 编写一个 COM 插件,该插件禁止双击单元格进行编辑。
我想弹出一个框,说禁止以这种方式编辑单元格,然后停止所有执行。
查看 Microsoft 的文档这似乎是一项非常简单的任务,您创建一个带有签名 func(object sheet, Range Target, ref bool Cancel) 的应用程序事件 AppEvents_SheetBeforeDoubleClickEventHandler 并将 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
【问题讨论】: