Endring av tekstfargen i en DTPicker styre

stemmer
4

I VB6, jeg har en DTPicker kontroll på et skjema. (The DTPicker er kalenderen dato / klokkeslett velgeren, inkludert i Microsoft Windows Common Controls-2 6.0, tilgjengelig fra dialogboksen Components.)

Mens det er mange egenskaper for å påvirke fargene på kalenderen når det er falt ned, er det ingen egenskap som lar deg endre fargen på datoen som vises i tekstboksen. Jeg ser etter noe sånt som standard TextBox sin Forecolor eiendom.

Er det noen som har litt API magi å tillate meg å simulere at eiendom?

Publisert på 24/10/2008 klokken 14:24
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Jeg hater å legge inn noe som ikke er veldig nyttig, men dette ser ut til å være noe utenfor rammen av hva Microsoft ment for utviklere å gjøre med kontrollen. Mens det må sikkert være et API-kall til å sette farge (Windows sikkert vet å male det svart når den er aktivert og grått når deaktivert), metoden for å gjøre det rømming meg.

Min anbefaling, bør ingen andre svare med hvordan du gjør det du trenger, er å enten få en ny Datetime Picker kontroll med de nødvendige egenskaper (det ville synes at det er noen tredje parts alternativer), eller "rulle din egen" kontroll .

FWIW, finnes det samme problemet i VB.NET med unntak er at Microsoft spesielt overstyrer (og deretter skjuler) de Forecolor (og Back) egenskaper arvet fra den generiske kontrollobjektet å gjøre ingenting.

Svarte 24/10/2008 kl. 18:31
kilden bruker

stemmer
0

Jeg kommer til å ta opp to problemer med DatePicker objekt og en løsning for dem.

  1. Du kan ikke sette en tom verdi i DatePicker, som fører meg til den andre problemet.
  2. Du kan ikke endre skriftfargen til minst gjøre det vises tomt.

For å holde funksjonaliteten til DatePicker og få muligheten til å ha en tom verdi og vanlige skriftformateringsalternativer (farger, etc), brukte jeg to stedene. Først lage en DTP objekt og angi bredden, slik at du kan egentlig bare se på rullegardinpilen. For meg var dette 15. Deretter lage en vanlig TextBox som er bred nok til å holde din date. Sett DTP pil direkte til høyre (eller venstre) i tekstboksen. Deretter kan du bare legge koden til Endre tilfelle av DTP å kopiere sin .Value i .text av TextBox slik:

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

Så har noen data referanser du trenger tilgang til MyDateTextBox.Text stedet for MyDTP.Value og vips! Du får funksjonaliteten til DTP med formater kontroll over en vanlig TextBox.

EDIT: Beklager jeffk, jeg var ikke arbeider med VB i et produksjonsmiljø 9 år siden. :) Jeg vil gjerne legge til den andre siden av funksjonaliteten til dette også. Dette gjør at to-veis synkronisering mellom tekstboksen og DTP. IE: manuelt angi en dato i tekstfeltet og DTP kalenderen følger. Hvis tekstboksen er tom eller har en ugyldig dato, DTP standard til dagens dato.

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
Svarte 20/07/2017 kl. 13:59
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more