Tipp-Upload: VB.NET 0141: DatePickerControl
von pks
Über den Tipp
Dieser Tippvorschlag ist noch unbewertet.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Steuerelemente
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
DateTimePicker, DatePicker, Datum, Usercontrol
Der Vorschlag wurde erstellt am: 06.11.2007 16:31.
Die letzte Aktualisierung erfolgte am 08.04.2008 13:55.
Beschreibung
NET (VB2005): das DateTimePicker Control kann kein Datum NULL verarbeiten, hier ein Ersatz, vom Design her absolut identisch, mit manueller Eingabe oder Auswahl über den Picker, Datum NULL, Eingabeprüfung etc. (Update am 07.03.2008)
Schwierigkeitsgrad |
Verwendete API-Aufrufe: |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird. ' In den Zip-Dateien ist er jedoch zu finden. ' ------- Anfang Projektdatei DatePickerControl.vbproj ------- ' ---------------- Anfang Datei DatePicker.vb ---------------- ' ----------------------------------------------- ' DatePicker VB2005 ' ----------------------------------------------- ' der DateTimePicker erlaubt kein Datum NULL ' hier der Ersatz mit der Möglichkeit der ' manuellen Eingabe oder Auswahl über einen DTP ' ' Autor peter.k.sauer@web.de ' created 06.11.2007 ' update ' ----------------------------------------------- Imports System.ComponentModel Public Class DatePicker Inherits TextBox Private WithEvents m_Button As Button Private WithEvents m_DTP As DateTimePicker Private m_Editable As Boolean Private m_Validate As Boolean Private m_ValidateText As String Private m_OnEnterTab As Boolean ''' <summary> ''' ruft ab oder legt fest ob bei Enter ''' ein Tab ausgelöst wird ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> <Description("ruft ab oder legt fest ob bei Enterein Tab ausgelöst wird")> Public _ Property OnEnterTab() As Boolean Get Return m_OnEnterTab End Get Set(ByVal value As Boolean) m_OnEnterTab = value End Set End Property ''' <summary> ''' Messagebox.Text bei Eingabefehler ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> <Description("Messagebox.Text bei Eingabefehler")> Public Property ValidateText() As String Get Return m_ValidateText End Get Set(ByVal value As String) m_ValidateText = value End Set End Property <Description("liefert das Datum oder stellt es ein")> Public Property Value() As DateTime Get Dim d As Date If Date.TryParse(Me.Text, d) Then Return d Else Return d End If End Get Set(ByVal value As DateTime) If value = Date.MinValue Then Me.Text = "" Else Me.Text = value.ToString("dd.MM.yyyy") End If End Set End Property ''' <summary> ''' DateTimePicker ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> <Description("DateTimePicker")> Public Property Picker() As DateTimePicker Get Return m_DTP End Get Set(ByVal value As DateTimePicker) m_DTP = value End Set End Property ''' <summary> ''' ruft ab oder legt fest ob eine Datumsprüfung _ ''' durchgeführt werden soll ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> <Description("ruft ab oder legt fest ob eine Datumsprüfung durchgeführt werden soll")> _ Public Property Validate() As Boolean Get Return m_Validate End Get Set(ByVal value As Boolean) m_Validate = value End Set End Property ''' <summary> ''' ruft ab oder legt fest ob ein Datum manuell ''' eingegeben werden kann ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> <Description("ruft ab oder legt fest ob ein Datummanuell erfasst werden kann")> Public _ Property Editable() As Boolean Get Return m_Editable End Get Set(ByVal value As Boolean) m_Editable = value End Set End Property Public Sub New() Me.OnEnterTab = True Me.Editable = True Me.Validate = True Me.ValidateText = "Datum ungültig" m_Button = New Button With m_Button .Parent = Me .Cursor = Cursors.Default .TabStop = False .BackColor = SystemColors.ButtonFace .ForeColor = SystemColors.WindowText .Size = New Size(17, 16) .Location = New Point(Me.ClientSize.Width - 17, 0) .Anchor = AnchorStyles.Top Or AnchorStyles.Right .Visible = True End With m_DTP = New DateTimePicker With m_DTP .Parent = Me .Format = DateTimePickerFormat.Short .Cursor = Cursors.Default .Size = Me.Size .Location = New Point(-2, -2) .Anchor = AnchorStyles.Top Or AnchorStyles.Left Or AnchorStyles.Right Or _ AnchorStyles.Bottom .BringToFront() .Visible = False End With End Sub Protected Overrides Sub Finalize() m_Button.Dispose() m_DTP.Dispose() MyBase.Finalize() End Sub ''' <summary> ''' DTP Month anzeigen ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub m_Button_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles m_Button.Click ShowMonth() End Sub ''' <summary> ''' Open Button zeichnen ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub m_Button_Paint(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) _ Handles m_Button.Paint Dim Gr As Graphics = e.Graphics Using Ft As New Font("Marlett", 9, FontStyle.Regular) Using Br As New SolidBrush(m_Button.ForeColor) Gr.DrawLine(Pens.White, 2, 1, 14, 1) Gr.DrawLine(Pens.White, 2, 1, 2, 13) Gr.DrawString("u", Ft, Br, 1, 1) End Using End Using End Sub ''' <summary> ''' DTP Visible = False ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub m_DTP_CloseUp(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles m_DTP.CloseUp m_DTP.Visible = False Me.Focus() End Sub ''' <summary> ''' Textbox aktualisieren ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub m_DTP_TextChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles m_DTP.TextChanged Me.Text = m_DTP.Text End Sub ''' <summary> ''' OnEnterTab, bei F4 DTP Month anzeigen ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub DatePicker_KeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyData.ToString = "F4" Then e.Handled = True ShowMonth() ElseIf e.KeyData.ToString = "Return" Then If OnEnterTab Then e.Handled = True SendKeys.Send("{Tab}") End If End If End Sub ''' <summary> ''' DTP aktivieren und aufklappen ''' </summary> ''' <remarks></remarks> Private Sub ShowMonth() Try m_DTP.Text = Me.Text Catch ex As Exception MessageBox.Show(ex.Message) Me.Show() End Try Me.Focus() m_DTP.BringToFront() m_DTP.Visible = True m_DTP.Focus() SendKeys.Send("{F4}") End Sub ''' <summary> ''' Eingabeprüfung Datum ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub DatePicker_KeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) _ Handles Me.KeyPress If Not Editable Then If Convert.ToInt32(e.KeyChar) <> 8 Then e.Handled = True Else Me.Text = "" End If Exit Sub End If Select Case e.KeyChar Case "0"c To "9"c Case Convert.ToChar(8) Case ","c e.KeyChar = "."c Case "."c Case Else e.Handled = True End Select End Sub ''' <summary> ''' Logikprüfung Datum ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub DatePicker_Validating(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles Me.Validating If (Me.Text.Length = 0) Or (Not Validate) Then Exit Sub End If Dim s As String = Me.Text If s.Length <= 2 Then Dim i As Integer If Integer.TryParse(s, i) Then If (i > 0) And (i < 32) Then s &= "." & Date.Now.Month.ToString End If End If End If Dim d As Date If Date.TryParse(s, d) Then Me.Text = d.ToString("dd.MM.yyyy") Else e.Cancel = True If Not String.IsNullOrEmpty(Me.Text) Then Me.SelectionStart = 0 Me.SelectionLength = Me.Text.Length End If MessageBox.Show(ValidateText, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End Sub End Class ' ----------------- Ende Datei DatePicker.vb ----------------- ' ------------------ Anfang Datei Form1.vb ------------------ ' ----------------------------------------------------- ' Form1 zu DatePicker ' Datepicker1, Textbox1, DatePicker1, Textbox2, Button1 ' ----------------------------------------------------- Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click MessageBox.Show(DatePicker1.Value.ToString) End Sub End Class ' ------------------- Ende Datei Form1.vb ------------------- ' -------- Ende Projektdatei DatePickerControl.vbproj --------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.