7

我在网上搜索并得到不一致的答案,这些答案并不能解决我的问题。我创建了一个对话框,然后单击向导为我创建了一个类。不幸的是,它把类和文件命名得很糟糕,所以我重命名了文件。现在visual studio不允许我通过gui对dlg资源做任何事情——比如连接一个按钮甚至处理程序等。我得到消息框:

“添加/删除操作是不可能的,因为代码元素 'Cxxxx' 是只读的”

这是一个真正的问题,因为通过代码手动添加处理程序和事物是乏味的,并且其中一位开发人员无法这样做 - 他需要 GUI 来操作事件。

我曾尝试删除 ncb 文件并重建项目,但一点运气都没有。MS 显然在 4 年左右后没有解决这个问题(基于我在网上看到的搜索。

我无法通过 MFC 应用程序向导 gui 添加变量、事件处理程序或其他任何有用的东西。我只能通过编辑 cpp 和 h 文件来做到这一点。

有没有人有什么建议?

4

7 回答 7

6

我在 VS2008 项目中添加了现有文件,也遇到了问题。我通过删除 .suo 文件并重新编译解决方案来修复它。

也许它可以帮助遇到这个问题的人。

于 2014-01-27T12:29:10.133 回答
2

我已经设法(意外地)重现了同样的问题。我已经定义DECLARE_EVENTSINK_MAP()并完整

BEGIN_EVENTSINK_MAP(CDlgMessage, CDialog)
ON_EVENT(CDlgMessage, IDC_GM_VIEW1, 1, CDlgMessage::GMEventGmView1, VTS_I2 VTS_BSTR VTS_BSTR)
END_EVENTSINK_MAP()

而且我已经手动删除了整个 BEGIN-END 部分,但我没有DECLARE删除。当我后来尝试通过 GUI 添加事件处理程序时,我收到了提到的响应。简单地删除DECLARED部分就解决了这个问题。

我相信这可以复制到所有类似的问题。

斯尔詹

于 2012-10-25T13:41:47.800 回答
1

我如何解决这个问题(删除 .ncb/.suo/.user 文件并重建没有帮助)......

当我的 VS 2008 项目中发生此错误时,我注意到以下特性:

  1. 它发生在一个对话+课程中,而不是其他对话。
  2. 在损坏对话框的 .cpp 类文件中,范围选择器只有“(全局范围)”项,没有其他行(预期的类不存在)
  3. 我还检查了 .h 类文件,范围选择器没有问题。

我首先在 #2 中修复了这个问题(如下所述),然后退出 VS,删除 *.ncb、*.suo 文件,重新启动 VS,重建项目,向导再次开始工作。

为了解决 #2 中的范围选择器问题,我首先将其缩小到不包含在类的 .h 文件中的头文件,即我在类声明中使用了一些类型,但在 .h 文件中没有声明这些类型的头文件。因此,如果我将类的 .h 文件包含到一个干净的 .cpp 文件中,它将无法编译。项目的其余部分编译正常,因为所有需要的文件都被添加到类的 .h 之前的所有相应的 .cpp 文件中。在我将所有必要的标题添加到类的 .h 的顶部(如此干净的 .cpp 文件将编译)之后,.cpp 文件中的范围选择器正确填充,进而修复了向导。

附带说明:有一种思想流派不将任何其他 .h 文件包含到任何 .h 文件中,微软似乎经常坚持这种方式(幸运的是并非总是如此)。我通常遵循不同的包含策略 - 始终将带有所有使用声明的标头包含到 .h 文件中,因此当我需要使用模块时,我必须只包含它的 .h 文件。在我遇到这种情况的罕见情况下,VS 向导阻塞(或 IntelliSense 阻塞了该向导所依赖的)。它使我对这项包容性政策的承诺更加坚定。该策略的唯一例外是不将任何 stdafx.h、windows 和 MFC 文件放入模块的 .h 文件中 - 由于预编译头文件的原因,这样做的方式不同。

于 2014-12-13T01:17:09.553 回答
1

我知道这可能来晚了,但是您是否也重命名了课程本身?如果是这样,您可能忘记重命名

DECLARE_DYNAMIC(RandomClass, CDialog/alternative)  

IMPLEMENT_DYNAMIC(RandomClass)

这些调用的文档不是很详尽,但是当我尝试创建一个可以添加事件的类时,在尝试向该类添加事件时遇到了类似的错误:

http://msdn.microsoft.com/en-us/library/ywz9k63y%28v=vs.90%29.aspx

于 2012-01-25T16:30:34.380 回答
1

仅供参考,我在 Visual Studio 2010 SP1 中遇到了同样的问题。

删除 SDF 文件(Visual Studio 2010 相当于先前版本的 NCB)解决了该问题。

(我先尝试了很多其他的事情,包括清理项目和重建,删除.suo文件等,但无济于事。但是最终删除SDF文件是否需要这些操作,我不知道。)

于 2016-08-18T20:12:18.493 回答
0

在 Visual Studio 2008 中删除解决方案 .ncb 文件并重建对我来说也很有效。我应该提到我在将代码迁移到新 PC 后开始面临这个问题。

于 2016-09-25T01:39:35.707 回答
0

我对 VS2005 也有同样的问题。我尝试删除 *.ncb 和 *.suo 但无济于事。

最后,我只需要关闭正在投诉的文件(因为它正在打开,当我们对 GUI 资源执行一些操作时,VS 无法自动将新代码添加到文件中,例如将事件处理程序添加到菜单物品)。

于 2017-01-19T13:45:47.857 回答