在vb6中替换表单控件

Bra*_*ore 3 vb6 controls

我们有一个内部按钮控制,坦白说它很糟糕.我想替换它,但我不想在我们的项目中使用每个表单并删除/添加新控件.在我看来,如果我设计一个新的按钮,它具有与旧的相同的属性,那么我应该能够给它与旧的相同的名称,只需将vbp文件中的所有参考行替换为点到新的控制.

有没有人试过这个(更好的是你听说过一个可以为你做的工具)如果是这样的话,我应该注意什么?

谢谢!

Boa*_*ann 7

*.vbp文件是您需要更改的位置.在包含GUI的文件中也引用了所使用的控件库 - 即形式(*.frm),控件(*.ctl)和属性页(*.pag)文件.这些文件采用纯文本格式,您可以在顶部看到引用.它们看起来像这样:

Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "mscomctl.ocx"
Run Code Online (Sandbox Code Playgroud)

如果新控件是已编译的OCX,则需要在所有相关文件中添加或更新这些引用.如果它在同一个项目中我不认为它需要任何参考,如果它在同一个项目组中的另一个项目中,我不确定.使用新控件保存测试表单以查看.

请注意,您不必保持相同的控件类名称.在*.frm/ctl/pag文件中,它们上的各个控件的实例由一个简单的格式表示,如下所示:

Begin VB.CommandButton Command2 
   Caption         =   "Cancel"
   Height          =   375
   Left            =   2460
   TabIndex        =   1
   Top             =   2400
   Width           =   1455
End
Run Code Online (Sandbox Code Playgroud)

第一行的语法是"Begin LibraryOrProjectName.ClassName NameOfThisInstance".因此,如果违规控件的名称与众不同,则应该很容易在BASIC源和GUI布局中搜索和替换对它的引用.您可能需要一个纯文本编辑器,可以跨多个文件执行搜索和替换(Notepad ++是一个).

某些控件属性存储如下:

   Picture         =   "frmMain.frx":292F
Run Code Online (Sandbox Code Playgroud)

这些文件对应于*.frx,*.ctx和*.pgx文件,这些文件包含某些控件属性值的二进制数据.我不认为这些文件需要改变或导致任何问题.它们似乎不包含控件名称.

使用完整编译(Ctrl + F5)以确保之后在源的部分中没有问题.

没试过.祝好运.

  • @BrandonMoore:控件本身不访问frx,但VB也没有填充属性; 它使用frx填充PropertyBag对象.它取决于它如何在属性包中组织数据,并且不需要(尽管几乎总是这样)与可见属性相关联.文件名肯定会很好地互操作,但标准图片属性只是一个没有引用文件的内存中对象,所以除非你当前的按钮不同,否则你仍然需要在所有现有按钮上设置文件名手动做到这一点. (2认同)