C# SheetBefore从COM双击加载项

C# SheetBefore从COM双击加载项,c#,excel,vba,com,add-in,C#,Excel,Vba,Com,Add In,我正在尝试用C#为Excel XP编写一个COM加载项,它禁止双击单元格进行编辑 我想弹出一个框,说明禁止以这种方式编辑单元格,然后停止所有执行 查看Microsoft的文档这似乎是一项非常简单的任务,您可以在双击事件处理程序之前创建一个应用程序事件AppEvents\u sheetbefore doubleClickEventHandler,并使用签名func(对象表、范围目标、引用布尔取消),然后将Cancel设置为true,以便停止执行 我有以下资料: public void OnConn

我正在尝试用C#为Excel XP编写一个COM加载项,它禁止双击单元格进行编辑

我想弹出一个框,说明禁止以这种方式编辑单元格,然后停止所有执行

查看Microsoft的文档这似乎是一项非常简单的任务,您可以在双击事件处理程序之前创建一个应用程序事件
AppEvents\u sheetbefore doubleClickEventHandler
,并使用签名
func(对象表、范围目标、引用布尔取消)
,然后将
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

我在执行代码时没有遇到任何问题:“取消”阻止了双击操作

某些搜索从MSKB中找到以下内容:

在使用使用Visual Studio.NET 2003(.NET Framework 1.1)创建的.NET代码时,Excel 2002及以下版本似乎存在忽略cancel参数的行为

本文中给出了一个复杂的解决方法,涉及手动调优互操作程序集。不过,如果付出相当大的努力,这看起来是可行的

升级到VS 2005或VS 2008会更容易。我使用VS2008.NET3.5编译了我的代码,并在Excel2007上运行了我的代码


顺便说一下,用户将能够通过在公式栏中键入、执行复制粘贴命令等方式输入值。为了防止用户输入值,您可以改为保护工作表。

嘿,我只是想感谢您投入时间。我最近一直在做一个项目,我需要这种功能,实际上我使用VS2008使用.NET3.5进行编译,但不使用Excel2002。我来试试解决办法。再次感谢。根据那篇文章,你应该可以接受VS2008。六羟甲基三聚氰胺六甲醚。。。好的,你可能想退房。它声明应该抛出一个错误,但是,如果不是,那么.NET1.1可能只是安静地运行,并因此引发“忽略取消事件”行为?