我要在.bas模块中创建一个PictureBox对象,是如何操作呢?
我的代码:
dim obj_pic as PictureBox '定义一个变量(不知道称呼'变量' 还是 '对象')set obj_pic=new PictureBox '使用关键字Set和New创建一个新的PictureBox对象。但是这行是不行的!请问各位,我该如何用代码创建一个PictureBox对象?谢谢!
我的代码:
dim obj_pic as PictureBox '定义一个变量(不知道称呼'变量' 还是 '对象')set obj_pic=new PictureBox '使用关键字Set和New创建一个新的PictureBox对象。但是这行是不行的!请问各位,我该如何用代码创建一个PictureBox对象?谢谢!
我该如何创建一个新的PictureBox对象pp呢?
Set obj_pic = Picture1
obj_pic.Left = 0
obj_pic.Width = 3000
obj_pic.Height = 5000
出现错误时应该还没有实例化
你的方法不行啊!(VB提示:变量末定义)
我知道是对象还没有实例化.现在我就是想请教大家,如何才能实例化呢?回复BlueBeer
加上WithEvents关键字定义自定义事件名,跟创建实例是没关系的.请大家继续想想方法!谢谢!
Set mytxt = Controls.Add("vb.textbox", "text1", Me)
mytxt.Move 1000, 1000, 1500, 300
mytxt.Visible = True
End SubPrivate Sub mytxt_Change()
MsgBox "textbox changed"
End Sub运行后,在textbox输入,将会触发change事件
然后你从上面的代码中去掉withevents关键字,再运行试一试
set pc1=picture1
然后在你要引用的事件里面直接调用就可以了
public functin test(pic as picturebox)
'你的代码
end function然后在需要时调用函数
*************************************************
同意BlueBeer的观点。
可是并没有回答楼主的问题哦
楼主知道错误是因为picturebox还没有实例化
但是问题是如何使之实例化用controls.add是可以实现用代码添加一个控件
不过按照面向对象的概念,在模块里声明一个空间对象
再实例化,逻辑上也是行得通得,除非VB里不支持这样做
public picP as picture
用来在内存中保存图形文件
具体代码想不起来了
回去查书吧....
2.楼主的问题其实问得很好,我也遇到过这样的问题,我是这样理解和解决的:
因为“控件本身的要放在容器里”,如form,frame等等,
所以如果要在窗体内动态生成控件可以用Controls.Add来添加,而在模块和类模块则不可以.
解决的办法是:你可以在类模块中声明这些变量,然后在窗体中添加控件,
再通过参数的办法传递到类模块中,然后在类模中用set语句,之后想怎么操作都可以了。
举一例子:
有一个停车场的显示屏,厂家没有做动态库,只提供了低层的协议(要显示什么就发什么到串口),
为了软件调用的方便,理应自已做成动态库的(要用vc,偶不会呀),但我做成类模块。
串口通信我用mscomm,这里就出现了楼主的问题了(要在类模块中生成控件)
于是我在模块中声明了个mscomm(如Mymscomm),成了个init的过程,在过程中用set语句
set Mymscomm = 传入来的mscomm,那么以后对Mymscomm的操作都可以了.
有些代码自己都不测试一下就贴出来指导别人
1,你先建一个form 如 MyForm
2,你在form里加一个PictureBox 如 MyPic
3,在模块引的对象就是 MyForm.MyPic楼上 bciAnson 的说法是正确的!
set objP = loadpicture("......")
我测试以下简单的代码,会出现“类型不符合”的错误
请各位指教一下Private Sub Command1_Click() ShowName (Form1)End SubPublic Sub ShowName(ByRef mForm As Form) MsgBox mForm.CaptionEnd Sub
先谢谢bciAnson!!! 我觉得bciAnson有一定的道理.但小弟我生性愚蠢,不知道bciAnson能否赐几行简单的代码经我试试呢?让大家一起来认识这个问题.谢谢!!!
Public mPictureBox As VB.PictureBoxPublic Sub init(ByRef mm As Object) If mm Is Nothing Then
MsgBox "对象为空!!!"
Exit Sub
End If
Set mPictureBox = mmEnd Sub窗体里的代码:
Private Sub Command1_Click()
Dim obj As New Class1
Dim mPicBox As PictureBox
Set mPicBox = Controls.Add("vb.picturebox", "Test", Me)
Call obj.init(mPicBox)
obj.mPictureBox.Visible = True
End Sub
'* *
'* ClassDisplay *
'* *
'*********************************
Option Explicit
Dim myMscom As MSComm
Dim mvarPortNum As String
Dim mvarSettings As String
Public blnInit As BooleanPublic Enum DisplayAction
DisplayCarType = 1
DisplayMoney = 2
DisplaySayHello = 3
DisplaySayGoodbye = 4
DisplaySetOFF = 5
End EnumPublic Sub initial(ByVal Mscom As MSComm, ByVal myComPort As Integer, Optional ByVal mySetting As String = "2400,n,8,1")
Set myMscom = Mscom
myMscom.Settings = mySetting
myMscom.CommPort = myComPort
mvarSettings = myMscom.Settings
mvarPortNum = myMscom.CommPort
blnInit = True
End Sub'Settting
Public Property Let CommSettings(ByVal vData As String)
If Not blnInit Then
Err.Raise 1001, , "未初始化,不能赋值"
Exit Property
End If
mvarSettings = vData
myMscom.Settings = vData
End PropertyPublic Property Get CommSettings() As String
If Not blnInit Then
Err.Raise 1002, , "未初始化,不能取值"
Exit Property
End If
CommSettings = mvarSettings
End PropertyPublic Property Let CommPortNum(ByVal vData As String)
If Not blnInit Then
Err.Raise 1001, , "未初始化,不能赋值"
Exit Property
End If
mvarPortNum = vData
myMscom.Settings = vData
End PropertyPublic Property Get CommPortNum() As String
If Not blnInit Then
Err.Raise 1002, , "未初始化,不能取值"
Exit Property
End If
CommPortNum = mvarPortNum
End Property'显示车型
Private Sub ShowCarType(ByVal intType As Integer)
Dim binbuff(6) As Byte
If Not blnInit Then
Err.Raise 1003, , "未初始化,不能不能执行该操作"
Exit Sub
End If
binbuff(0) = &H7E
binbuff(1) = &H7E
binbuff(2) = &H7E
binbuff(3) = Asc("T")
binbuff(4) = intType
binbuff(5) = binbuff(3) Xor binbuff(4)
binbuff(6) = 0
If Not myMscom.PortOpen = True Then myMscom.PortOpen = True
myMscom.Output = binbuff
myMscom.PortOpen = False
End Sub'显示金额
Private Sub ShowMoney(ByVal intMoney As Integer)
Dim binbuff(6) As Byte
If Not blnInit Then
Err.Raise 1003, , "未初始化,不能不能执行该操作"
Exit Sub
End If
binbuff(0) = &H7E
binbuff(1) = &H7E
binbuff(2) = &H7E
binbuff(3) = Asc("M")
binbuff(4) = intMoney
binbuff(5) = binbuff(3) Xor binbuff(4)
binbuff(6) = 0
If Not myMscom.PortOpen = True Then myMscom.PortOpen = True
myMscom.Output = binbuff
myMscom.PortOpen = False
End Sub'显示欢迎光临
Private Sub SayHello()
Dim binbuff(6) As Byte
If Not blnInit Then
Err.Raise 1003, , "未初始化,不能不能执行该操作"
Exit Sub
End If
binbuff(0) = &H7E
binbuff(1) = &H7E
binbuff(2) = &H7E
binbuff(3) = Asc("S")
binbuff(4) = 0
binbuff(5) = binbuff(3) Xor binbuff(4)
binbuff(6) = 0
If Not myMscom.PortOpen = True Then myMscom.PortOpen = True
myMscom.Output = binbuff
myMscom.PortOpen = False
End Sub'显示一路顺风
Private Sub SayGoodbye()
Dim binbuff(6) As Byte
If Not blnInit Then
Err.Raise 1003, , "未初始化,不能不能执行该操作"
Exit Sub
End If
binbuff(0) = &H7E
binbuff(1) = &H7E
binbuff(2) = &H7E
binbuff(3) = Asc("S")
binbuff(4) = 1
binbuff(5) = binbuff(3) Xor binbuff(4)
binbuff(6) = 0
If Not myMscom.PortOpen = True Then myMscom.PortOpen = True
myMscom.Output = binbuff
myMscom.PortOpen = False
End Sub'熄屏
Private Sub SetOFF()
Dim binbuff(6) As Byte
If Not blnInit Then
Err.Raise 1003, , "未初始化,不能不能执行该操作"
Exit Sub
End If
binbuff(0) = &H7E
binbuff(1) = &H7E
binbuff(2) = &H7E
binbuff(3) = Asc("O")
binbuff(4) = Asc("f")
binbuff(5) = binbuff(3) Xor binbuff(4)
binbuff(6) = 0
If Not myMscom.PortOpen = True Then myMscom.PortOpen = True
myMscom.Output = binbuff
myMscom.PortOpen = False
End SubPublic Sub Display(ByVal Action As DisplayAction, Optional intDisplayParam As Integer = 0)
If Not blnInit Then
Err.Raise 1003, , "未初始化,不能不能执行该操作"
Exit Sub
End If Select Case Action
Case DisplayCarType:
Call ShowCarType(intDisplayParam)
Case DisplayMoney:
Call ShowMoney(intDisplayParam)
Case DisplaySayHello:
Call SayHello
Case DisplaySayGoodbye:
Call SayGoodbye
Case DisplaySetOFF:
Call SetOFF
End Select
End Sub
'*********************************
'* *
'* 窗体的调用 *
'* *
'*********************************
Option Explicit
Dim myDisplay As New ClassDisplay
Dim msComm1 As MSComm
Private Sub cmdInit_Click()
If myDisplay.blnInit = False Then Set msComm1 = Controls.Add("MSCommLib.MSComm", "MSComm1")
Call myDisplay.initial(msComm1, txtPort.Text)
End SubPrivate Sub cmdCardType_Click()
myDisplay.Display DisplayCarType, (txtType.Text)
End SubPrivate Sub cmdMoney_Click()
myDisplay.Display DisplayMoney, (txtMoney.Text)
End SubPrivate Sub cmdHello_Click()
myDisplay.Display DisplaySayHello
End SubPrivate Sub cmdGoodbye_Click()
myDisplay.Display DisplaySayGoodbye
End SubPrivate Sub cmdSetOff_Click()
myDisplay.Display DisplaySetOFF
End Sub
对了,我也是这么做的。