vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
DTPicker-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!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DTPicker-Steuerelement - Eigenschaft mindate/maxdate per Code setzen 
Autor: ModeratorDieter (Moderator)
Datum: 03.04.19 12:12

Ich kann das Problem nicht wirklich nachstellen; welche Werte setzt du denn bspw. ein für MinDate und MaxDate? Und wie genau sieht der Quell-Code hierzu aus?

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DTPicker-Steuerelement - Eigenschaft mindate/maxdate per Code setzen 
Autor: V A T
Datum: 04.04.19 15:00

Hallo Manfred,

danke für Deinen Test, deine Infos und deinen Workaround.

Ich habe noch das hier gefunden, wo das Problem auch beschrieben wird: http://www.c-bit.org/Q/198880/EN-US/ Ist interessant...

Muss mal testen, ob der Lösungsansatz da für mich umsetzbar ist. Hört sich für 'nen Amateur kompliziert an.

Gruß und nochmals danke!!!

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!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DTPicker-Steuerelement - Eigenschaft mindate/maxdate per Code setzen 
Autor: Manfred X
Datum: 04.04.19 15:45

Was geschieht, wenn Du den Service Pack 6
für Visual Basic 6 installierst?
(Ich nutze VB6 seit längerem nicht mehr und
kann deshalb nicht beurteilen, wie sich das Pack
bei neueren Windows-Versionen auswirkt.)

https://www.microsoft.com/en-us/download/details.aspx?id=5721

Besser hier:
https://www.microsoft.com/en-us/download/details.aspx?id=50722

Beitrag wurde zuletzt am 04.04.19 um 16:06:20 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel