Изменение цвета текста в элементе управления DTPicker - PullRequest
4 голосов
/ 24 октября 2008

В VB6 у меня есть элемент управления DTPicker на форме. (DTPicker - это селектор календарной даты / времени, включенный в Microsoft Windows Common Controls-2 6.0, доступный из диалога компонентов.)

Хотя существует множество свойств, влияющих на цвета календаря при его раскрытии, нет свойства, позволяющего изменить цвет даты, отображаемой в текстовом поле. Я ищу что-то вроде стандартного свойства ForeColor TextBox.

У кого-нибудь есть немного магии API, позволяющей мне смоделировать это свойство?

Ответы [ 2 ]

1 голос
/ 25 октября 2008

Я ненавижу публиковать что-то, что не очень полезно, но, похоже, это выходит за рамки того, что Microsoft намеревалась сделать разработчикам с элементом управления. Несмотря на то, что должен быть вызов API, чтобы установить цвет (Windows, конечно, знает, как его покрасить в черный цвет, когда он включен, и в серый, если он отключен), метод для этого ускользает от меня.

Моя рекомендация, если никто больше не ответит, как делать то, что вам нужно, это либо получить новый элемент управления DateTime Picker с необходимыми свойствами (может показаться, что есть несколько сторонних опций), либо «бросить собственный "контроль".

FWIW, эта же проблема существует в VB.NET, за исключением того, что Microsoft специально переопределяет (а затем скрывает) свойства ForeColor (и BackColor), унаследованные от универсального объекта Control, чтобы ничего не делать.

0 голосов
/ 20 июля 2017

Я собираюсь решить две проблемы с объектом DatePicker и обойти их.

  1. Вы не можете поместить пустое значение в DatePicker, что привело меня ко второй проблеме.
  2. Вы не можете изменить цвет шрифта, чтобы он хотя бы оставался пустым.

Чтобы сохранить функциональность DatePicker И получить возможность иметь пустое значение и ваши обычные параметры форматирования шрифта (цвета и т. Д.), Я использовал два объекта. Сначала создайте объект DTP и установите ширину, чтобы вы могли видеть только стрелку раскрывающегося списка. Для меня это было 15. Тогда сделайте обычный TextBox, достаточно широкий, чтобы вместить вашу дату. Поместите стрелку DTP прямо справа (или слева) от текстового поля. Затем вы просто добавляете код в событие Change DTP, чтобы скопировать его .Value в .Text TextBox следующим образом:

Private Sub MyDTP_Change()    
    MyUserForm.MyDateTextBox.Text = MyUserForm.MyDTP.Value
End Sub

Затем получите любые ссылки на данные, которые вам нужны, чтобы получить доступ к MyDateTextBox.Text вместо MyDTP.Value и presto! Вы получаете функциональность DTP с контролем форматирования обычного TextBox.

EDIT: Извините, Джефф, я не работал с VB в производственной среде 9 лет назад. :) Я хотел бы добавить другую сторону функциональности к этому также. Это позволяет выполнять двустороннюю синхронизацию между TextBox и DTP. IE: вручную введите дату в TextBox и DTP Calendar следует. Если 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
...