在VB6中,我在表单上有一个DTPicker控件。 (DTPicker是日历日期/时间选择器,包含在Microsoft Windows Common Controls-2 6.0中,可从“组件”对话框中获得。)
虽然有许多属性会在日历下拉时影响日历的颜色,但没有任何属性允许更改文本框中显示的日期的颜色。我正在寻找像标准TextBox的ForeColor属性。
有没有人有一点API魔法允许我模拟该属性?
答案 0 :(得分:1)
我讨厌发布一些不太有用的东西,但这似乎超出了微软打算让开发人员使用控件做的事情。虽然必须有一个API调用来设置颜色(Windows当然知道在启用时将其绘制为黑色,在禁用时将其绘制为灰色),但这样做的方法让我感到厌烦。
我的推荐,如果没有其他人回应如何做你需要的,是要么获得一个具有所需属性的新DateTime Picker控件(似乎有一些第三方选项),或“滚动你的拥有“控制权”。
FWIW,VB.NET中存在同样的问题,除了Microsoft特别覆盖(然后隐藏)从通用Control对象继承的ForeColor(和BackColor)属性,什么都不做。
答案 1 :(得分:0)
我将解决DatePicker对象的两个问题以及它们的解决方法。
为了保持DatePicker的功能并获得空白值和常规字体格式选项(颜色等),我使用了两个对象。首先制作一个DTP对象并设置宽度,这样你才能真正看到下拉箭头。对我来说这是15.然后制作一个足够宽的常规TextBox来保存你的日期。将DTP箭头直接放在文本框的右侧(或左侧)。然后,您只需将代码添加到DTP的Change事件中,将其.Value复制到TextBox的.Text中,如下所示:
Private Sub MyDTP_Change()
MyUserForm.MyDateTextBox.Text = MyUserForm.MyDTP.Value
End Sub
然后有任何数据引用你需要访问MyDateTextBox.Text而不是MyDTP.Value和presto!您可以使用常规TextBox的格式控制来获得DTP的功能。
编辑: 对不起JeffK,9年前我在生产环境中没有使用VB。 :)我想在此添加功能的另一面。这允许TextBox和DTP之间的双向同步。 IE:在TextBox中手动输入日期,然后是DTP日历。如果TextBox为空或具有无效日期,则DTP默认为今天的日期。
Private Sub MyDateTextBox_Change()
If MyUserForm.MyDateTextBox.Text <> "" And
IsDate(MyUserForm.MyDateTextBox.Text) = True Then
If CDate(MyUserForm.MyDateTextBox.Text) <= MyUserForm.MyDPT.MaxDate And _
CDate(MyUserForm.MyDateTextBox.Text) >= MyUserForm.MyDPT.MinDate Then
MyUserForm.MyDTP.Value = MyUserForm.MyDateTextBox.Text
Else
MyUserForm.MyDTP.Value = Date
End If
Else
MyUserForm.MyDTP.Value = Date
End If
End Sub