向任何控件添加事件处理程序会导致 Visual Studio 中的错误

Posted

技术标签:

【中文标题】向任何控件添加事件处理程序会导致 Visual Studio 中的错误【英文标题】:Adding an event handler to any Controls causes error in Visual Studio 【发布时间】:2016-06-08 18:15:15 【问题描述】:

我有一个 MFC 应用程序,它带有一个加载多个 dll 的单个 exe,在我的一个 dll 项目中,我创建了一个对话框,我想为复选框更改时添加一个事件侦听器。当我使用资源编辑器添加事件处理程序时,它会在我的头文件中添加一个定义,在我的 cpp 文件中添加一个函数,并在

之间添加一行
BEGIN_MESSAGE_MAP(CHardwareListing, CDialog)
END_MESSAGE_MAP()

代码的一部分,但添加的这一行,

ON_BN_CLICKED(IDC_CHECK1, &CHardwareListing::OnBnClickedCheck1)

导致我不知道如何解释的奇怪错误。

“错误,需要一个表达式”

我发现这个错误很奇怪的原因是因为我有其他文件以相同的方式设置而没有这个错误,实际上在添加事件处理程序后看起来几乎相同。有关导致此问题的原因以及如何解决此问题的任何帮助?

【问题讨论】:

在黑暗中的总拍摄...BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 之间是否还有其他内容?假设存在,则该错误可能由其上方的代码产生。 Visual Studio 期望该行中的表达式一定是有原因的,所以我会仔细查看它上面的代码,并可能尝试将有问题的行移动到新位置。附带说明...使用 Visual Studio 2012 并使用 MFC 应用程序将您牢牢地固定在老牌名人堂中。 :) 【参考方案1】:

指针:

确保类在标题中有DECLARE_MESSAGE_MAP 确保BEGIN_MESSAGE_MAP 中的基类/派生类正确 确保CHardwareListing::OnBnClickedCheck1 确实存在并且类型正确。同时检查IDC_CHECK1 是否有效。 确保 resource.h 包含在 CPP 或标头中。

另外,如果是由 Intellisense 报告的,而不是由实际的 C++ 编译器报告的,请忽略此警告/错误

【讨论】:

【参考方案2】:

我找到了解决此错误的方法,由于某种原因,Visual Studio 在导致问题的“CHardwareListing”参数之前放置了一个“&”字符。仍然不确定为什么首先插入该字符。

【讨论】:

现在,类向导添加 & 字符前缀是相当标准的。

以上是关于向任何控件添加事件处理程序会导致 Visual Studio 中的错误的主要内容,如果未能解决你的问题,请参考以下文章

Visual C#中事件的下拉列表在哪里?

在 Visual Studio 设计器中为控件指定双击事件

向大约 15 个 firebase 对象添加值/子事件会导致堆大小增加吗?

js事件委托

VBA for Access 2010:动态创建控件和链接事件处理程序

visual stdio 开发ActiveX控件基本教程