更改DTPicker控件中的文本颜色

时间:2008-10-24 16:24:15

标签: vb6 colors

在VB6中,我在表单上有一个DTPicker控件。 (DTPicker是日历日期/时间选择器,包含在Microsoft Windows Common Controls-2 6.0中,可从“组件”对话框中获得。)

虽然有许多属性会在日历下拉时影响日历的颜色,但没有任何属性允许更改文本框中显示的日期的颜色。我正在寻找像标准TextBox的ForeColor属性。

有没有人有一点API魔法允许我模拟该属性?

2 个答案:

答案 0 :(得分:1)

我讨厌发布一些不太有用的东西,但这似乎超出了微软打算让开发人员使用控件做的事情。虽然必须有一个API调用来设置颜色(Windows当然知道在启用时将其绘制为黑色,在禁用时将其绘制为灰色),但这样做的方法让我感到厌烦。

我的推荐,如果没有其他人回应如何做你需要的,是要么获得一个具有所需属性的新DateTime Picker控件(似乎有一些第三方选项),或“滚动你的拥有“控制权”。

FWIW,VB.NET中存在同样的问题,除了Microsoft特别覆盖(然后隐藏)从通用Control对象继承的ForeColor(和BackColor)属性,什么都不做。

答案 1 :(得分:0)

我将解决DatePicker对象的两个问题以及它们的解决方法。

  1. 您不能在DatePicker中添加空白值,这会导致我遇到第二个问题。
  2. 您不能将字体颜色更改为至少使其显示为空白。
  3. 为了保持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