5

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

虽然有许多属性会影响日历下拉时的颜色,但没有属性可以更改文本框中显示的日期颜色。我正在寻找类似于标准 TextBox 的 ForeColor 属性的东西。

有没有人有一点 API 魔法可以让我模拟那个属性?

4

2 回答 2

1

我讨厌发布一些没有真正帮助的东西,但这似乎超出了微软希望开发人员对控件进行的操作范围。虽然肯定有一个 API 调用来设置颜色(Windows 肯定知道在启用时将其绘制为黑色,在禁用时将其绘制为灰色),但这样做的方法却让我无法理解。

我的建议是,如果没有其他人回应如何做你需要的事情,要么获得具有所需属性的新 DateTime Picker 控件(似乎有一些第 3 方选项),要么“滚动你自己的”控件.

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

于 2008-10-24T20:31:22.800 回答
1

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

  1. 您不能将空白值放入 DatePicker,这导致我遇到第二个问题。
  2. 您不能将字体颜色更改为至少使其显示为空白。

为了保持 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:在文本框中手动输入日期,然后是 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
于 2017-07-20T14:59:11.103 回答