我们有一个内部的按钮控件,说实话它很糟糕。我想要替换它,但我不想在项目中的每个表单上进行删除/添加新控件的操作。我认为如果我设计一个具有与旧按钮相同属性的新按钮,那么我应该能够给它与旧按钮相同的名称,并仅更改vbp文件中的所有引用行以指向新控件即可。
是否有人尝试过这样的操作(最好是您是否听说过可以自动完成此操作的工具),如果有,我应该注意哪些问题?
谢谢!
*.vbp文件是需要修改的地方之一。GUI文件包含的控制库的引用也在其中,这些文件包括form (*.frm)、control (*.ctl)和property page (*.pag)。这些文件都是纯文本格式,你可以在顶部看到引用。它们看起来像这样:
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "mscomctl.ocx"
如果新控件是已编译的 OCX,则需要在所有相关文件中添加或更新这些引用。如果它在同一项目中,我不认为需要任何引用;如果它在同一项目组中的另一个项目中,我不确定。请保存一个带有新控件的测试表单以查看。
请注意,您不必保留相同的控件类名。在 *.frm/ctl/pag 文件中,它们上的各个控件实例由如下简单格式表示:
Begin VB.CommandButton Command2
Caption = "Cancel"
Height = 375
Left = 2460
TabIndex = 1
Top = 2400
Width = 1455
End
第一行的语法是“Begin LibraryOrProjectName.ClassName NameOfThisInstance”。因此,如果问题控件的名称是独特的,那么在BASIC源代码和GUI布局中查找并替换对它的引用应该很容易。您可能需要一个可以跨多个文件执行搜索和替换的纯文本编辑器(Notepad++就是这样一个编辑器)。
有些控件属性是这样存储的:
Picture = "frmMain.frx":292F
我只需要为已接受答案添加一个提示。
如果您需要用第三方或自定义的ActiveX控件替换任何通用的VB控件,您必须替换:
BeginProperty Font
使用
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
需要注意的另一个情况是,如果OCX中的类在代码中直接引用。
换句话说,如果控件类是ABCButton
,那么您需要在所有.BAS
和.CLS
文件中查找ABCButton
,并进行适当的更改。
IPictureDisp
或StdPicture
,那么它可能会与原始控件存储相同,但我认为它完全取决于控件如何内部读写其内容--它不必与通常访问其属性的方式一致。您可能需要手动处理图片。 - Boann