1

在一台计算机'A'(win vista 32 位)上,如果我在调试模式下运行我的程序,所有richtextbox 控件都会抛出'property cannot be set'错误。我可以继续构建exe(没有错误)和完整的应用程序,但是当我在这台计算机或计算机(win xp)上安装并运行应用程序'B'时,两者都会出现相同的问题。

但是,如果我在计算机“”上以调试模式运行完全相同的代码,B则没有错误。如果我在计算机“ ”上构建并安装应用程序,B它工作正常。如果我在计算机上安装此应用程序' A'它也可以正常工作。将应用程序放在一起进行分发时,两台计算机使用相同的副本richtx32.ocx(它与代码一样,是从同一个存储库中签出的)。

如果我在计算机''上查看以前的代码副本A(以前表现良好),它们现在也会出现与最新版本的代码相同的问题。

我不知道发生了什么,请帮忙!

4

2 回答 2

1

我看到多个引用在 Visual Studio 6.0 Service Pack 4Property cannot be set中分发的富文本控件版本中解析的消息,以及在 SP5 中修复的另一条消息。Property cannot be set

首先,确保至少安装了 SP5;我会选择SP6。

作为参考,我的 Microsoft Rich Textbox Control 6.0 (SP6) 位于C:\Windows\System32\RICHTX32.OCX,版本为6.1.97.82

我知道您说两台机器都安装了相同的控件副本;为了完整起见,您可能需要仔细检查新控件是否在安装后注册。

编辑:

我导出了HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}reg 密钥:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}]
@="Microsoft Rich Textbox Control 6.0 (SP6)"

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\Control]

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\Implemented Categories]

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\Implemented Categories\{0DE86A52-2BAA-11CF-A229-00AA003D7352}]

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\Implemented Categories\{0DE86A53-2BAA-11CF-A229-00AA003D7352}]

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\Implemented Categories\{0DE86A57-2BAA-11CF-A229-00AA003D7352}]

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\Implemented Categories\{40FC6ED4-2438-11CF-A3DB-080036F12502}]

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\Implemented Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502}]

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}]

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\InprocServer32]
@="C:\\Windows\\system32\\RICHTX32.OCX"
"ThreadingModel"="Apartment"

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\MiscStatus]
@="0"

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\MiscStatus\1]
@="131473"

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\ProgID]
@="RICHTEXT.RichtextCtrl.1"

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\Programmable]

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\ToolboxBitmap32]
@="C:\\Windows\\system32\\RICHTX32.OCX, 1"

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\TypeLib]
@="{3B7C8863-D78F-101B-B9B5-04021C009402}"

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\Version]
@="1.2"

[HKEY_CLASSES_ROOT\CLSID\{3B7C8860-D78F-101B-B9B5-04021C009402}\VersionIndependentProgID]
@="RICHTEXT.RichtextCtrl"
于 2012-11-16T18:41:56.543 回答
1

system32 目录中的一个坏richtx32.oca 文件似乎是造成这种情况的原因。

以下是 .oca 文件的作用:

控件的一些属性由框架提供,一些由控件本身提供。以编程方式,来自框架和控件的属性都显示为控件的属性。

为了使这些属性出现,Visual Basic 在控件加载到工具箱时创建一个扩展类型库。因为读取控件的类型库和创建扩展类型库的过程非常耗时,Visual Basic 将扩展类型库信息缓存到 OCA 文件中。

如果删除 Visual Basic 识别的控件的 OCA 文件,则在加载需要该控件的项目时,Visual Basic 将重新创建 .OCA 文件。这个娱乐过程伴随着时间惩罚。

So it seems that having a bad .oca file in existence can mean that the properties of the control both in the IDE and in the compiled .exe will be affected. The solution is to delete the .oca file in the system32 folder and then load the project again.

于 2012-11-18T09:11:53.330 回答