在一台计算机上'A'
(win vista 32位)如果我在调试模式下运行我的程序,则所有richtextbox控件都会抛出'property cannot be set'
错误。
我可以继续构建exe
(没有错误)和完整的应用程序OK
但是,当我在这台计算机或计算机'B'
(win xp)上安装并运行应用程序时,两者都会出现同样的问题。
但是,如果我在计算机“B
”上以调试模式运行完全相同的代码,则没有错误。
如果我在计算机“B
”上构建并安装该应用程序,它可以正常工作。如果我然后在计算机“A
”上安装此应用程序,它也可以正常工作。
将应用程序放在一起进行分发时,两台计算机都使用相同的richtx32.ocx
副本(它与代码一样,从同一个存储库中检出)。
如果我在计算机“A
”上检查以前的代码副本(过去以前的行为正常),它们现在也会出现与最新版本代码相同的问题。
我不知道发生了什么,请帮忙!
答案 0 :(得分:1)
我在distributed in Visual Studio 6.0 Service Pack 4的富文本控件版本和另一个Property cannot be set
message fixed in 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}
注册码:
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"
答案 1 :(得分:1)
system32目录中的一个错误的richtx32.oca文件似乎就是这个原因。
Here's .oca文件的作用:
控件的某些属性由框架提供 还有一些是由控制本身组成的。以编程方式,来自的属性 框架和控件都显示为控件的属性。
为了显示这些属性,Visual Basic会创建一个 控件加载到工具箱中时的扩展类型库。 因为读取控件的类型库并创建的过程 扩展类型库很耗时,Visual Basic缓存 将类型库信息扩展到OCA文件中。
如果删除了Visual Basic识别的控件的OCA文件, 加载项目时,Visual Basic将重新创建.OCA文件 需要控制。这个娱乐过程伴随着时间 罚。
因此,似乎存在一个糟糕的.oca文件可能意味着IDE和编译的.exe中的控件属性都会受到影响。 解决方案是删除system32文件夹中的.oca文件,然后再次加载项目。