Изменение цвета текста в элементе управления DTPicker

StackOverflow https://stackoverflow.com/questions/234238

  •  04-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

РЕДАКТИРОВАТЬ:Извините, ДжеффК, я не работал с VB в производственной среде 9 лет назад.:) Хотелось бы добавить к этому и другую сторону функционала.Это обеспечивает двустороннюю синхронизацию между TextBox и DTP.ИЕ:Вручную введите дату в текстовое поле, после чего появится календарь DTP.Если текстовое поле пусто или имеет недопустимую дату, 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top