Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582

    [vb.net ] usercontrol per maschera data

    salve a tutti dato il seguente codice:

    codice:
    Imports Microsoft.VisualBasic
    
    Public Class UserControl1
        'Inherits System.Windows.Forms.UserControl
        Inherits System.Windows.Forms.TextBox
    
    #Region " Codice generato da Progettazione Windows Form "
    
        Public Sub New()
            MyBase.New()
    
            'Chiamata richiesta da Progettazione Windows Form.
            InitializeComponent()
    
            'Aggiungere le eventuali istruzioni di inizializzazione dopo la chiamata a InitializeComponent()
    
        End Sub
    
        'UserControl1 esegue l'override del metodo Dispose per pulire l'elenco dei componenti.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
    
        'Richiesto da Progettazione Windows Form
        Private components As System.ComponentModel.IContainer
    
        'NOTA: la procedura che segue è richiesta da Progettazione Windows Form.
        'Può essere modificata in Progettazione Windows Form.  
        'Non modificarla nell'editor del codice.
        Private WithEvents TXT_Data As System.Windows.Forms.TextBox
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.TXT_Data = New System.Windows.Forms.TextBox
            Me.SuspendLayout()
            '
            'TXT_Data
            '
            Me.TXT_Data.Location = New System.Drawing.Point(0, 0)
            Me.TXT_Data.MaxLength = 10
            Me.TXT_Data.Name = "TXT_Data"
            Me.TXT_Data.Size = New System.Drawing.Size(120, 20)
            Me.TXT_Data.TabIndex = 0
            Me.TXT_Data.Text = "__/__/____"
            '
            'UserControl1
            '
            Me.Controls.Add(Me.TXT_Data)
            Me.Name = "UserControl1"
            Me.Size = New System.Drawing.Size(120, 16)
            Me.ResumeLayout(False)
    
        End Sub
    
    #End Region
        Dim testo As String
    
        Private TestoFormat As String = "__/__/____"
        Private mMessageTitle As String
    
        Public Shadows Property BackColor() As Color
            Get
                Return Me.TXT_Data.BackColor
            End Get
            Set(ByVal Value As Color)
                Me.TXT_Data.BackColor = Value
            End Set
        End Property
        Public Shadows Property Text() As String
            Get
                Return Me.TXT_Data.Text
            End Get
            Set(ByVal Value As String)
                Me.TXT_Data.Text = Value
            End Set
        End Property
    
        Public Shadows Property MessageTitle() As String
            Get
                Return mMessageTitle
            End Get
            Set(ByVal Value As String)
                mMessageTitle = Value
            End Set
        End Property
    
        Private Sub TXT_Data_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TXT_Data.Validating
            If Me.TXT_Data.Text = TestoFormat Then Exit Sub
    
            If IsDate(Me.TXT_Data.Text) = False Then
                MessageBox.Show("Data invalida", MessageTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Me.TXT_Data.Focus()
                Me.TXT_Data.SelectAll()
            End If
    
        End Sub
    
        Private Sub TXT_Data_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TXT_Data.KeyDown
            'Exit Sub
            testo = Me.TXT_Data.Text
            ' Me.TXT_Data.Text = ""
            testo = Replace(testo, "/", "")
            testo = Replace(testo, "_", "")
            Dim lun As Integer = Len(testo)
    
            If e.KeyCode = Keys.Back Or e.KeyCode = Keys.Cancel Then
                ' If testo = "" Then Exit Sub
                'testo = Mid(testo, 1, Len(testo) - 1)
                Exit Sub
            End If
    
            If lun = 8 Then Exit Sub 'gli impedisco di aggiungere
            If IsNumeric(Chr(e.KeyCode)) = False Then Exit Sub
            testo = testo & Chr(e.KeyCode)
            lun = Len(testo)
            Dim app As String
    
            Select Case lun
                Case Is = 1
                    app = Mid(testo, 1, 2) & "_/__/___"
                Case Is = 2
                    app = Mid(testo, 1, 2) & "/__/___"
                Case Is = 3
                    app = Mid(testo, 1, 2) & "/" & Mid(testo, 3, 1) & "_/___"
                Case Is = 4
                    app = Mid(testo, 1, 2) & "/" & Mid(testo, 3, 2) & "/___"
                Case Is = 5
                    app = Mid(testo, 1, 2) & "/" & Mid(testo, 3, 2) & "/" & Mid(testo, 5, 1) & "___"
                Case Is = 6
                    app = Mid(testo, 1, 2) & "/" & Mid(testo, 3, 2) & "/" & Mid(testo, 5, 2) & "__"
                Case Is = 7
                    app = Mid(testo, 1, 2) & "/" & Mid(testo, 3, 2) & "/" & Mid(testo, 5, 3) & "_"
                Case Is = 8
                    app = Mid(testo, 1, 2) & "/" & Mid(testo, 3, 2) & "/" & Mid(testo, 5, 4)
            End Select
            'testo = Me.TXT_Data.Text
            Me.TXT_Data.Text = app
        End Sub
    
    
    End Class

    voglio creare una maschera per formattare l'inserimetno delle date
    solo che conquesto codice se isnerisco 4 mi compare 44 e via dicendo,insomma duplica tutto quello che inserisco
    non so cosa fare
    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2
    Se usi una MaskedTextBox invece di creare un UserControl?

    Inserisci il controllo MaskedTextBox e nalla propietà Mask metti 00/00/0000.

    Ciao
    Il linguaggio migliore e quello che ti crei da solo...

  3. #3
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    Originariamente inviato da Akira86
    Se usi una MaskedTextBox invece di creare un UserControl?

    Inserisci il controllo MaskedTextBox e nalla propietà Mask metti 00/00/0000.

    Ciao
    uso visual studio 2002
    e qui non c'è questo controllo
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Quando l'evento di pressione del tasto viene intercettato, occorre annullare la pressione del tasto se si desidera che non venga veicolato al controllo (che provvederà ad inserirlo nel punto giusto) indicando che è già stato "gestito" dal codice dell'evento.

    In fondo, è sufficiente leggere la documentazione degli eventi di cui si fa uso.

    Da un punto di vista progettuale, se lo scopo è quello di creare una casella di testo dall'input controllato, non si dovrebbe creare uno UserControl, ma un discendente del controllo TextBox: oltre ad essere più corretto, si tratta di una soluzione che fornisce di gran lunga più possibilità, in quanto si accede ai membri protected della classe base.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.