Creare classe dataTimepicker personalizzato

di il
6 risposte

Creare classe dataTimepicker personalizzato

Buonasera, sto creando una classe ereditando l'oggetto DateTimePicker
poi all'interno aggiungo un oggetto MaskedTextBox a runtime che copre in parte il dateTimePicker
a livello form aggiungo l'oggetto appena creato e voglio che si scatena l'evento keydown.
all'avvio del programma clicco sulla parte del maskedTextBox il keydown non funziona mentre se clicco sul dataTimePicker funziona.
Dove sbaglio?


questo è uno stralcio di classe dove inserisco l'evento keyDown

Me.txtDateTime = New System.Windows.Forms.MaskedTextBox
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.txtDateTime})
AddHandler Me.txtDateTime.KeyDown, New KeyEventHandler(AddressOf On_KeyDown)

Private Sub On_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyCode = Keys.Enter Then
SendKeys.Send("{TAB}")
End If
End Sub

In pratica l'evento KeyDown non fa parte del MaskedTextBox ma è del DateTimePicker

6 Risposte

  • Re: Creare classe dataTimepicker personalizzato

    Flavio ha scritto:


    In pratica l'evento KeyDown non fa parte del MaskedTextBox ma è del DateTimePicker
    Se hai agganciato l'evento da gestire solo al DateTimePicker, è ovvio che l'altro non ti venga segnalato: devi gestire entrambi gli eventi.

    Non capisco però la scelta di derivare da uno dei due controlli per poi inserire l'altro al suo interno: meglio creare a questo punto uno User Control che li raggruppi entrambi e che intercetti gli eventi dell'uno o dell'altro, generando a propria volta un evento personalizzato, se necessario, che consenta di gestire le condizioni richieste al controllo visto come un tutt'uno (scusa il giro di parole).

    Ciao!
  • Re: Creare classe dataTimepicker personalizzato

    Intanto grazie x la risposta, il motivo d'inserire due oggetti è perchè devo gestire il backcolor che in dateTimePicker non potevo gestire.
  • Re: Creare classe dataTimepicker personalizzato

    Riguardo a gestire i due eventi non so come fare.
    Hai qualche esempio?
    Grazie
  • Re: Creare classe dataTimepicker personalizzato

    Flavio ha scritto:


    il motivo d'inserire due oggetti è perchè devo gestire il backcolor che in dateTimePicker non potevo gestire.
    Il problema non sta nei due oggetti, ma nella scelta di derivare da uno di questi.

    Flavio ha scritto:


    Riguardo a gestire i due eventi non so come fare.
    Uno di questi l'hai già gestito... qual è il problema di aggiungere il secondo allo stesso modo?
  • Re: Creare classe dataTimepicker personalizzato

    Questa è una parte della mia classe: Public Class MaskedtextBoxAF
    Inherits System.Windows.Forms.DateTimePicker

    Me.txtDateTime = New System.Windows.Forms.MaskedTextBox
    Me.txtDateTime.Location = New System.Drawing.Point(20, 49)
    Me.txtDateTime.MaxLength = 10
    Me.txtDateTime.Name = "txtDateTime"
    Me.txtDateTime.TabIndex = 0
    Me.txtDateTime.Mask = "00/00/0000"
    Me.txtDateTime.PromptChar = Space(1)
    Me.TabStop = True
    Me.txtDateTime.Text = MyBase.Value
    Me.txtDateTime.BorderStyle = BorderStyle.Fixed3D

    Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.txtDateTime})

    AddHandler Me.txtDateTime.KeyDown, New KeyEventHandler(AddressOf Me.TxtDateTime_KeyDown)

    Private Sub TxtDateTime_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)
    If e.KeyCode = Keys.Enter Then
    SendKeys.Send("{TAB}")
    End If
    End Sub
    end class

    'sul form1 trascino l'oggetto e avvio il programma
    Public Class Form1

    Private Sub MaskedtextBoxAF1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MaskedtextBoxAF1.KeyDown

    End Sub
    End Class

    Il problema è: quando digito qualcosa sull'oggetto non scatena l'evento keydown sul form, ma usa il keydown della classe
  • Re: Creare classe dataTimepicker personalizzato

    Risolto:
    Sulla classe bastava inserire :
    Public Shadows Event KeyDown As KeyEventHandler

    Private Sub txtDateTime_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)
    If e.KeyCode = Keys.Enter Then
    SendKeys.Send("{TAB}")
    RaiseEvent KeyDown(sender, e)
    End If
    End Sub
Devi accedere o registrarti per scrivere nel forum
6 risposte