Pergunta

Em VB6, eu tenho um controle DTPicker em um formulário. (O DTPicker é o seletor de data do calendário / hora, incluído no Controls-2 Microsoft Windows comuns 6.0, disponível a partir do diálogo Components.)

Embora existam muitas propriedades para afetar as cores do calendário quando é deixado cair para baixo, não há nenhuma propriedade que permite mudar a cor da data que é exibido na caixa de texto. Eu estou procurando algo como propriedade ForeColor da caixa de texto padrão.

Alguém tem um pouco de magia API para permitir-me para simular que a propriedade?

Foi útil?

Solução

Eu odeio a publicar algo que não é realmente útil, mas isso parece ser algo além do escopo do que Microsoft destina-se aos desenvolvedores fazer com o controle. Enquanto há certamente deve ser uma chamada de API para definir a cor (Windows certamente sabe para pintar de preto quando ativado e cinza quando desativado), o método para fazê-lo me escapa.

A minha recomendação, caso ninguém respondem mais com como fazer o que você precisa, quer seja para obter um novo controle DateTime Picker com as propriedades necessárias (parece que existem algumas opções de 3rd party), ou "rolar o seu controle próprio".

FWIW, este mesmo problema existe no VB.NET, com a exceção de que Microsoft especificamente substituições (e depois couros) as propriedades ForeColor (e BackColor) herdadas do objeto Control genérico para não fazer nada.

Outras dicas

Vou tratar de duas questões com o objeto DatePicker e uma solução alternativa para eles.

  1. Você não pode colocar um valor em branco em DatePicker, que me levar ao segundo problema.
  2. Você não pode alterar a cor da fonte, pelo menos, fazê-lo aparecer em branco.

Para manter a funcionalidade do DatePicker e ganhar a capacidade de ter um valor em branco e suas formatação de fonte opções regulares (cores, etc), eu usei dois objetos. Primeiro faça um objeto DTP e definir a largura de modo que você só pode realmente ver a seta suspensa. Para mim, este era 15. Então faça um TextBox regular que é grande o suficiente para manter a sua data. Coloque o DTP arrow diretamente para a direita (ou esquerda) da caixa de texto. Em seguida, basta adicionar o código para o evento de alteração do DTP para copiar sua .Value no .Text do TextBox como assim:

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

Então, quaisquer referências dados que você precisa acessar o MyDateTextBox.Text vez do MyDTP.Value e presto! Você começa a funcionalidade do DTP com o controle de formatação de um TextBox regular.

EDIT: Desculpe JeffK, eu não estava trabalhando com VB em um ambiente de produção 9 anos. :) Eu gostaria de adicionar o outro lado da funcionalidade para isso também. Isso permite que 2-way sincronização entre o TextBox eo DTP. IE: Manualmente insira uma data para o TextBox eo Calendário DTP segue. Se a caixa de texto está em branco ou tem uma data inválida, os padrões DTP para a data de hoje.

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top