Ändern der Textfarbe in einer DTPicker Steuer
Frage
In VB6, ich habe eine DTPicker Steuerelement in einem Formular. (Der DTPicker ist das Kalenderdatum / Zeit-Selektor, in Microsoft Windows Common Controls-2 6.0, erhältlich von der Komponenten-Dialog).
Zwar gibt es viele Eigenschaften sind die Farben des Kalenders zu beeinflussen, wenn sie nach unten fallen gelassen, gibt es keine Eigenschaft, die die Farbe des Datums erlaubt das Ändern, die in der Textbox angezeigt wird. Ich bin auf der Suche nach so etwas wie der ForeColor-Eigenschaft des Standard TextBox.
Hat jemand eine kleine API Magie mir zu erlauben, diese Eigenschaft zu simulieren?
Lösung
Ich hasse etwas zu schreiben, die nicht wirklich hilfreich ist, aber dies scheint etwas über den Rahmen dessen, was Microsoft soll Entwicklern die Kontrolle zu tun. Zwar gibt es sicherlich einen API-Aufruf sein muss, um die Farbe zu setzen (Windows weiß sicher, es zu malen schwarz, wenn aktiviert und grau, wenn sie deaktiviert), wobei das Verfahren so entgeht mich zu tun.
Meine Empfehlung, sollte niemand anders reagieren, wie zu tun, was Sie brauchen, ist entweder eine neue Datetime-Picker Steuerung mit den benötigten Eigenschaften zu erhalten (es scheint, dass einige 3rd-Party-Optionen gibt es), oder „Fahren Sie mit eigene“Kontrolle.
FWIW, das gleiche Problem existiert in VB.NET mit der Ausnahme, dass Microsoft speziell überschreibt (und dann versteckt) die ForeColor (und Backcolor) Eigenschaften aus dem allgemeinen Steuer Objekt geerbt nichts zu tun.
Andere Tipps
Ich werde zwei Probleme mit dem Datepicker Objekt und eine Abhilfe für sie lösen.
- Sie können nicht einen leeren Wert in Datepicker, setzen die mich zu dem zweiten Problem führen.
- Sie können die Schriftfarbe ändern zumindest, um es leer erscheinen zu lassen.
, um die Funktionalität des Datepicker zu halten und die Fähigkeit zu erlangen, einen leeren Wert und Ihre regelmäßigen Schriftformatierungsoptionen (Farben, etc.), habe ich zwei Objekte. Zunächst ein DTP-Objekt machen und die Breite festgelegt, so dass Sie nur wirklich die Dropdown-Pfeil sehen. Für mich war das 15. Dann eine regelmäßige TextBox machen, die breit genug ist, Ihr Datum zu halten. Legen Sie die DTP direkt nach rechts (oder links) des Textfeldes Pfeil. Dann einfach Sie Code an das Change-Ereignis des DTP hinzufügen seine .Wert in die .Text des TextBox zu kopieren wie folgt:
Private Sub MyDTP_Change()
MyUserForm.MyDateTextBox.Text = MyUserForm.MyDTP.Value
End Sub
Dann keine Datenreferenzen haben Sie die MyDateTextBox.Text zugreifen müssen anstelle der MyDTP.Value und presto! Sie erhalten die Funktionalität des DTP mit der Formatierung Kontrolle eines regelmäßigen TextBox.
EDIT: Leider jeffk, ich arbeite nicht mit VB in einer Produktionsumgebung vor 9 Jahren. :) Ich möchte die andere Seite der Funktionalität, dies auch addieren. Auf diese Weise kann 2-Wege-Synchronisierung zwischen dem Text und dem DTP. IE: manuell ein Datum in das Textfeld eingeben und der DTP-Kalender folgt. Wenn das Textfeld leer ist oder hat ein ungültiges Datum, die DTP standardmäßig auf dem heutigen Datum.
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