无法设置richtextbox控件的属性

时间:2012-11-12 13:10:46

标签: vb6 richtextbox

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

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

如果我在计算机“A”上检查以前的代码副本(过去以前的行为正常),它们现在也会出现与最新版本代码相同的问题。

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

2 个答案:

答案 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文件,然后再次加载项目。