动态加载用户控件后不能调用其属性方法的问题。如解决可以用2G的代码做为报答。
qyh 2002-08-22 12:58:15 关于动态加载用户控件的问题,我担心我说得不是很清楚,所有把代码贴出来。
测试方法:将下面那个控件生成FileOcx.Ocx,然后新建一个工程,在Form1中加入一个按钮,加入以下代码。
问题是:在不将FileOcx.Ocx添加到VB的控件箱中的前提下,我怎么才能成功调用FileOcx的FileName属性??
我不是想实现一个功能,我只是想成功调用FileOcx的FileName属性就行了。谢谢大家。
Dim WithEvents oControl As VBControlExtender
Private Function LoadControl()
Dim MyOCX As Control
Licenses.Add "FileOcx.FileLoad"
If Not oControl Is Nothing Then
Controls.Remove ("FileView")
End If
Set MyOCX = Controls.Add("FileOcx.FileLoad", "FileView")
MyOCX.FileName="C:\test.txt" '这里将会出错。
Set oControl = MyOCX
oControl.Height = 13500
oControl.Width = 16500
oControl.Top = 100
oControl.Visible = True
End Function
Private Sub Command1_Click()
LoadControl
End Sub
'============================================================
'============================================================
控件代码:
FileOcx.vbp文件
'============================================================
Type=Control
UserControl=FileLoad.ctl
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\WINNT\System32\stdole2.tlb#OLE Automation
Object={3B7C8863-D78F-101B-B9B5-04021C009402}#1.2#0; richtx32.ocx
Startup="(None)"
Command32=""
Name="FileOcx"
HelpContextID="0"
CompatibleMode="1"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=1
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
ThreadingModel=1
'======================================================
FileLoad.ctl文件
'======================================================
VERSION 5.00
Object = "{3B7C8863-D78F-101B-B9B5-04021C009402}#1.2#0"; "richtx32.ocx"
Begin VB.UserControl FileLoad
ClientHeight = 3600
ClientLeft = 0
ClientTop = 0
ClientWidth = 4800
ScaleHeight = 3600
ScaleWidth = 4800
Begin RichTextLib.RichTextBox RichTextBox1
Height = 3375
Left = 0
TabIndex = 0
Top = 0
Width = 4695
_ExtentX = 8281
_ExtentY = 5953
_Version = 393217
Enabled = -1 'True
TextRTF = $"FileLoad.ctx":0000
End
End
Attribute VB_Name = "FileLoad"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit
Const m_def_FileName = ""
Dim m_FileName As String
Public Property Get FileName() As String
FileName = m_FileName
End Property
Public Property Let FileName(ByVal New_FileName As String)
m_FileName = New_FileName
PropertyChanged "FileName"
End Property
Private Sub UserControl_InitProperties()
m_FileName = m_def_FileName
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
m_FileName = PropBag.ReadProperty("FileName", m_def_FileName)
End Sub
Private Sub UserControl_Resize()
RichTextBox1.Height = UserControl.Height
RichTextBox1.Width = UserControl.Width
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("FileName", m_FileName, m_def_FileName)
End Sub