我在自定义的用户控件中放入了三个控件:
TextBox Name:"TD" 用于绑定表中的日期字段。
CommandButton Name:"Com" 用于弹出日历控件
MonthView Name:"MV" 共用户从日历中选择一个日期,
并将选择的结果格式化以后传递给TD
其工作时的情形是:TextBox显示表中的日期,当用户点击CommandButton时
弹出一个日历选择框供用户从中选择一个日期,选择完毕后,将用户选择的日期放回给TextBox。
问题一:
将此控件放在Form上能正常工作。但是,如果将此控件放在容器里,比如Frame里面,问题就来了。
当日里弹出后只能看见容器内的部分,超出部分被容器剪裁掉了,用户无法看见。
弹出日历的代码如下:
Private Sub Com_Click() '弹出日历
MV.Top = TD.Top + TD.Height
MV.Left = TD.Left
UserControl.Height = TD.Top + TD.Height + MV.Top + MV.Height
UserControl.Width = IIf(MV.Width > TD.Width + Com.Width, MV.Left + MV.Width, UWidth)
If IsNull(TD.Text) Or (Trim(TD.Text) = "") Or (Not IsDate(TD.Text)) Then
MV.Value = Date
Else
MV.Value = CDate(TD.Text)
End If
MV.Visible = True
MV.SetFocus
End Sub
请问各位高手:如何才能使Usercontrol像VB自带的控件(比如ListView等)一样,突破容器的限制呢?
问题二:
在自建的UserControl里为什么不能设置自己定义的属性值?
还是以上控件,我自定义了一个控件的属性UBorderSlty:
Public Property Get UBorderSlty() As
UBorderSlty = TD.BorderStyle
End Property
Public Property Let UBorderSlty(ByVal New_UBorderSlty As Integer)
TD.BorderStyle = New_UBorderSlty
PropertyChanged "UBorderSlty"
End Property
UBorderSlty属性的默认值为“0”
以上代码是VB自动生成的,但是在向Form添加了自定义控件后,设置UBorderSlty属性值为“1”的时候没有问题,
该Usercontrol立刻被加了边框,但在运行时,TD.BorderStyle的值却始终是自定义控件在设计时设定的值。
不知这是怎么回事?
6 个解决方案
#1
up
#2
为什么这样做?用DTPicker不好吗,非得自己做.
#3
我也定义和你类似的控件,如果兴趣,给我email,给你一具类似的程序
bingcaicai@sina.com
bingcaicai@sina.com
#4
我觉得最好不要包装现有的控件,太慢了,应该自己写一个类模块
然后添加一些属性和方法,将需要调整的控件定义成一个属性
然后再类模块内部
private withevents M_Text as Textbox
Private WithEvents M_Cmd as CommandButton
Private WithEvents M_Dtpicker as Dtpicker
然后你就可以看到代码窗体左边下拉框中出现了刚定义的三个控件,
选中可以在右边的相应事件中添加代码。
然后添加一些属性和方法,将需要调整的控件定义成一个属性
然后再类模块内部
private withevents M_Text as Textbox
Private WithEvents M_Cmd as CommandButton
Private WithEvents M_Dtpicker as Dtpicker
然后你就可以看到代码窗体左边下拉框中出现了刚定义的三个控件,
选中可以在右边的相应事件中添加代码。
#5
chenhw(我要回复):
我这样做的最主要的原因是DTPicker控件自默认模式下不能接收NULL值,所以在绑定到某个字段时如果该字段允许NULL值的话就会出错。
我这样做的最主要的原因是DTPicker控件自默认模式下不能接收NULL值,所以在绑定到某个字段时如果该字段允许NULL值的话就会出错。
#6
sssoft(恒谦):
你的方法我也很感兴趣,我试试看。
你的方法我也很感兴趣,我试试看。
#1
up
#2
为什么这样做?用DTPicker不好吗,非得自己做.
#3
我也定义和你类似的控件,如果兴趣,给我email,给你一具类似的程序
bingcaicai@sina.com
bingcaicai@sina.com
#4
我觉得最好不要包装现有的控件,太慢了,应该自己写一个类模块
然后添加一些属性和方法,将需要调整的控件定义成一个属性
然后再类模块内部
private withevents M_Text as Textbox
Private WithEvents M_Cmd as CommandButton
Private WithEvents M_Dtpicker as Dtpicker
然后你就可以看到代码窗体左边下拉框中出现了刚定义的三个控件,
选中可以在右边的相应事件中添加代码。
然后添加一些属性和方法,将需要调整的控件定义成一个属性
然后再类模块内部
private withevents M_Text as Textbox
Private WithEvents M_Cmd as CommandButton
Private WithEvents M_Dtpicker as Dtpicker
然后你就可以看到代码窗体左边下拉框中出现了刚定义的三个控件,
选中可以在右边的相应事件中添加代码。
#5
chenhw(我要回复):
我这样做的最主要的原因是DTPicker控件自默认模式下不能接收NULL值,所以在绑定到某个字段时如果该字段允许NULL值的话就会出错。
我这样做的最主要的原因是DTPicker控件自默认模式下不能接收NULL值,所以在绑定到某个字段时如果该字段允许NULL值的话就会出错。
#6
sssoft(恒谦):
你的方法我也很感兴趣,我试试看。
你的方法我也很感兴趣,我试试看。