【问题标题】:C# EventHandler - No overload matches delegate (huh?)C# EventHandler - 没有重载匹配委托(嗯?)
【发布时间】:2012-02-09 23:08:32
【问题描述】:

AfterOpenDocument 事件工作正常,但是当我添加第二个事件BeforeSaveDocument 时,我无法编译代码。

我收到的错误是:

QWApp_BeforeSaveDocument 没有重载匹配委托QuoteWerks.__Application_BeforeSaveDocumentEventHandler

我对 c# 还很陌生,但我认为这一定是一些疏忽。

  QWApp.AfterOpenDocument  += new __Application_AfterOpenDocumentEventHandler(QWApp_AfterOpenDocument);
  QWApp.BeforeSaveDocument += new __Application_BeforeSaveDocumentEventHandler(QWApp_BeforeSaveDocument);

  void QWApp_AfterOpenDocument()
    {
        string todayDate = DateTime.Now.ToString("MM/dd/yyyy");
        QWApp.DocFunctions.SetDocumentHeaderValue("DocDate", todayDate, false);
        QWApp.DocFunctions.RefreshDisplay();
    }

   public void QWApp_BeforeSaveDocument(int iSaveAction, bool bCancel)
    {
        string todayDate = DateTime.Now.ToString("MM/dd/yyyy");
        QWApp.DocFunctions.SetDocumentHeaderValue("DocDate", todayDate, false);
        QWApp.DocFunctions.RefreshDisplay();
    }

【问题讨论】:

  • 在不知道委托签名的情况下,我们很难知道出了什么问题。 __Application_BeforeSaveDocumentEventHandler 长什么样子?
  • 如果您使用的是 Visual Studio,在键入 += 后按两次 Tab,这将生成一个带有适当签名的存根方法。
  • 双下划线是怎么回事? 叹息
  • 双下划线我不知道。我从应用程序论坛的帖子中复制了此代码。但是,当我注释掉 using Quotewerks 引用时,VS 说“找不到类型或命名空间”,因此它必须与该引用相关。
  • 我让它工作了。解决方法见下方回复。

标签: c# event-handling overloading


【解决方案1】:

正如编译器所说,__Application_BeforeSaveDocumentEventHandler 委托的参数与 QWApp_BeforeSaveDocument 不同。

确保两者的参数相同。

如果我猜的话,你应该在QWApp_BeforeSaveDocument 中有ref bool bCancel 或(不太可能,out bool bCancel)。再次检查您的 __Application_BeforeSaveDocumentEventHandler 委托,并让您的函数具有相同的参数。

【讨论】:

  • ref bool 更可能是恕我直言,因为您可以轻松地链接多个事件处理程序。
  • 超级骗子!在输入 += 后,我执行了 {tab} {tab} 以生成具有适当签名的存根方法,果然 bool bCancel (ref bool bCancel) 之前的 'ref' 是缺少的项目。有人可以向我解释一下 ref 的含义吗?
  • 意思是"pass by reference"
【解决方案2】:

这意味着您的处理程序的参数与事件(委托)的参数不匹配。
检查委托构造函数的工具提示,了解它需要哪些参数。

【讨论】:

    【解决方案3】:

    我对那个库一无所知,但在这个 page 上,BeforeSaveDocument 事件的签名是 BeforeSaveDocument (short, ref bool)

    我会尝试将 iSaveAction 更改为 short 和/或将布尔参数设置为 ref 参数并查看是否编译。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多