| |
Visual-Basic EinsteigerDTPicker-Steuerelement - Eigenschaft mindate/maxdate per Code setzen | | | Autor: V A T | Datum: 02.04.19 19:47 |
| Hallo,
ich habe eine kleine Anwendung, in der ich mehrere DTPicker-Steuerelemente benutze, damit der Anwender Daten aus einem kleinen Kalender auswählen kann.
Dabei setze ich [u]per Code (vorab ist nicht möglich, da sich die Begrenzungsdaten aus der Anwendungsnutzung heraus ergeben) die Eigenschaften mindate/maxdate (also den Bereich, aus dem der Anwender Datenwählen können soll).
Das Problem: Ich kann alle Werte setzen, ich kann sie auch zur Kontrolle abfragen, aber [u]wirksam wird immer nur der zuletzt gesetzte Wert. D.h. wenn ich mindate vor maxdate setze, wird nur maxdate wirksam, wenn ich maxdate vor mindate setze, wird nur mindate wirksam. Obwohl beide Werte korrekt (kann ich durch abfrage prüfen) eingestellt sind, wird nur einer wirksam.
Was mache ich falsch?
Jetzt schon mal meinen ernst gemeinten Dank an alle, die mir zu helfen versuchen!!!
Gruß
V A T
Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!! | |
Re: DTPicker-Steuerelement - Eigenschaft mindate/maxdate per Code setzen | | | Autor: Manfred X | Datum: 03.04.19 17:14 |
| Hallo!
Ich vermute in solchen Fällen eine Ereigniskette.
Ptüfe, ob beim Setzen von Eigenschaftswerten (min,max)
von Dir programmierte Ereignisverarbeitungsroutinen
aktiv werden.
Beitrag wurde zuletzt am 03.04.19 um 17:15:19 editiert. | |
Re: DTPicker-Steuerelement - Eigenschaft mindate/maxdate per Code setzen | | | Autor: V A T | Datum: 04.04.19 01:22 |
| Hallo Manfred,
danke für Deine Unterstützung.
Nach meinem Verständnis gibt es im folgenden Beispiel keine Ereignisketten, oder?!
Das Problem ist sehr simpel und in einer Minute für jeden nachstellbar:
1. Form (Form1) anlegen
2. auf die Form ein DTPicker-Steuerelement (DTPicker1) setzen
und jetzt nur noch in das Form_Load-Ereignis folgenden Code einfügen:
Private Sub Form_Load()
DTPicker1.MaxDate = "31.12.2019"
DTPicker1.MinDate = "01.01.2019"
End Sub Wenn Du das Programm jetzt startest, dann wirst du feststellen, dass man alle(!) Daten in der Zukunft wählen kann, obwohl die Eigenschaft MaxDate auf "31.12.2019" steht. In der Vergangenheit kannst du korrekterweise nur bis zum "01.01.2019" zurück. D.h. die Eigenschaft MinDate greift.
Wenn man die beiden Codezeilen nun tauscht...
Private Sub Form_Load()
DTPicker1.MinDate = "01.01.2019"
DTPicker1.MaxDate = "31.12.2019"
End Sub ...dann ergibt sich umgekehrtes Verhalten. Die MaxDate-Eigenschaft greift, die MinDate-Eigenschaft ist wirkungslos.
Fazit: Es greift immer nur die zuletzt eingegebene Eigenschaft (MinDate oder MaxDate).
Ich versteh nicht warum. Gibt es hier vielleicht einen Bug?
Gruß
V A T
Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!!
Beitrag wurde zuletzt am 04.04.19 um 01:27:25 editiert. | |
Re: DTPicker-Steuerelement - Eigenschaft mindate/maxdate per Code setzen | | | Autor: V A T | Datum: 04.04.19 01:24 |
| Hallo Dieter,
danke für Deine Unterstützung.
Das Problem ist sehr simpel und in einer Minute für jeden nachstellbar:
1. Form (Form1) anlegen
2. auf die Form ein DTPicker-Steuerelement (DTPicker1) setzen
und jetzt nur noch in das Form_Load-Ereignis folgenden Code einfügen:
Private Sub Form_Load()
DTPicker1.MaxDate = "31.12.2019"
DTPicker1.MinDate = "01.01.2019"
End Sub Wenn Du das Programm jetzt startest, dann wirst du feststellen, dass man alle(!) Daten in der Zukunft wählen kann, obwohl die Eigenschaft MaxDate auf "31.12.2019" steht. In der Vergangenheit kann man korrekterweise nur bis zum "01.01.2019" zurück. D.h. die Eigenschaft MinDate greift.
Wenn man die beiden Codezeilen nun tauscht...
Private Sub Form_Load()
DTPicker1.MinDate = "01.01.2019"
DTPicker1.MaxDate = "31.12.2019"
End Sub ...dann ergibt sich umgekehrtes Verhalten. Die MaxDate-Eigenschaft greift, die MinDate-Eigenschaft ist wirkungslos.
Fazit: Es greift immer nur die zuletzt eingegebene Eigenschaft (MinDate oder MaxDate).
Ich versteh nicht warum. Gibt es hier vielleicht einen Bug?
Gruß
V A T
Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!! | |
Re: DTPicker-Steuerelement - Eigenschaft mindate/maxdate per Code setzen | | | Autor: Manfred X | Datum: 04.04.19 12:44 |
| Hallo!
Ich habe gerade getestet
Visual Basic 6 Professional - ohne Servicepack
Windows Vista
DateTimePicker-Control aus der Komponente: MSCOMCT2
Die Werte der MinDate-/MaxDate-Eigenschaften im Code gesetzt.
Unter diesen Rahmenbedingungen konnte ich Dein
Problem reproduzieren.
Dieser Hinweis scheint nicht zu funktionieren:
https://stackoverflow.com/questions/11589788/how-to-reset-the-datetimepicker
Auch das Setzen der Value-Eigenschaft in das gewünschte Intervall
schafft keine Abhilfe.
Der einzige Weg, der mir eingefallen ist, wäre das Prüfen des
gewählten Wertes im Change-Event des Control und ggf. das Setzen
einer unzulässigen Auswahl des Zeitpunktes auf die verletzte
Intervallgrenze.
Beitrag wurde zuletzt am 04.04.19 um 12:56:41 editiert. | |
Re: DTPicker-Steuerelement - Eigenschaft mindate/maxdate per Code setzen | | | Autor: V A T | Datum: 04.04.19 20:32 |
| Hallo,
der Tipp mit SendMessage aus dem genannten Link http://www.c-bit.org/Q/198880/EN-US/ hat für mich das Problem gelöst! Das kleine Beispielprogramm zeigt, wie es gelingt, beide Eigenschaften parallel aktiv zu nutzen!
Kann jeder anhand der Beschreibung einfach nachstellen (nur auf das englische Datenformat muss man achten und vielleicht das Beispieljahr 1999 in 2019 ändern - LOL).
Gruß und Dank an alle Helfer!
Gruß
V A T
Private Sub Command5_Click()
Dim TimeArray(1) As SYSTEMTIME
Dim result As Long
' Define first element of SYSTEMTIME Array to be minimum date.
TimeArray(0).wDay = 1
TimeArray(0).wMonth = 1
TimeArray(0).wYear = 2019
' Define second element of SYSTEMTIME Array to be maximum date.
TimeArray(1).wDay = 31
TimeArray(1).wMonth = 12
TimeArray(1).wYear = 2019
' Call API to send message to control to set MinDate and MaxDate.
result = SendMessage(Me.DTPicker1.hwnd, DTM_SETRANGE, _
GDTR_MIN + GDTR_MAX, TimeArray(0))
End Sub und im Modulteil
Option Explicit
Public Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Public Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Public Const DTM_SETRANGE = &H1004&
Public Const GDTR_MIN = 1
Public Const GDTR_MAX = 2 Vielen Dank an alle in diesem Forum, welche mir Ihre Zeit schenken und sich mit meinen Problemen befassen! Ich weiß das ernsthaft zu schätzen und danke allen, die sich mit dieser Frage befassen herzlich!!! | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere Infos
|