我正在尝试在 C# 中为 Excel XP 编写一个 COM 插件,该插件禁止双击单元格进行编辑。
我想弹出一个框,说禁止以这种方式编辑单元格,然后停止所有执行。
浏览 Microsoft 的文档,这似乎是一项非常简单的任务,您可以创建一个应用程序事件 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
最佳答案
我执行您的代码没有问题:“取消”阻止了双击操作。
一些搜索从 MSKB 中找到了以下内容:BUG: Cancel parameter for Office events is ignored in Visual Studio .NET 2003 .
在使用使用 Visual Studio .NET 2003 (.NET Framework 1.1) 创建的 .NET 代码时,Excel 2002 及更低版本似乎存在这种忽略取消参数的行为。
文章中给出了一个复杂的解决方法,涉及手动调整互操作程序集。不过,如果付出相当大的努力,它看起来还是很可行的。
升级到 VS 2005 或 VS 2008 会更容易。我使用面向 .NET 3.5 的 VS 2008 编译了我的代码,并在 Excel 2007 上运行了我的代码。
顺便说一下,用户将能够通过在公式栏中键入、执行复制-粘贴命令等来输入值。为了防止用户输入值,您可以改为保护工作表。
关于c# - 来自 COM 插件的 SheetBeforeDoubleClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/643172/