2013-07-25 19 views
6

Ho diverse caselle di testo e maschere mascherate in una winform che ho bisogno di controllare se sono vuote, null o nulla prima di procedere.Come verificare se la casella di testo Masked è vuota?

Il codice che ho per la maggior parte funziona come previsto, se c'è una texbox vuota ricevo un messaggio che dice all'utente che la casella di testo è vuota ed esce dal sub, ma per qualche motivo che non sta controllando il caselle di testo mascherate.

Forse ho sbagliato e sta controllandoli, ma poiché hanno la maschera non sono considerati vuoti o nulli.

Il vostro aiuto per controllare se le texbox mascherate sono vuote sarebbe molto apprezzato.

Questo è il codice:

Private Sub btnCargarInformacion_Click(sender As System.Object, e As System.EventArgs) Handles btnCargar.Click 
    For Each myControl As Control In Me.GroupBox1.Controls 
     If TypeOf (myControl) Is TextBox Then 
      If myControl.Text.Equals(String.Empty) Then 
       MessageBox.Show(String.Format("Please Fill the following Textboxes: {0}", String.Join(",", myControl.Name))) 
      End If 
      If myControl.Text.Equals(String.Empty) Then 
       Exit Sub 
      End If 
     End If 
    Next 
    Dim PartePersonalTableApt As New PersonalObraDataSetTableAdapters.PartePersonalTableAdapter 
    Dim PersonalObTableApt As New PersonalObraDataSetTableAdapters.PersonalObTableAdapter 
    PartePersonalTableApt.ClearBeforeFill = True 
    PartePersonalTableApt.FillByFecha(PersonalObraDataSet.PartePersonal, txtDate.Text, txtDepartamento.Text, txtTurno.Text) 
    PersonalObTableApt.ClearBeforeFill = True 
    PersonalObTableApt.Fillby(PersonalObraDataSet.PersonalOb) 
End Sub 

risposta

3
if textbox.MaskCompleted=True Then 
    'they entered something 
else 
    ' they didnt enter anything 

Endif 
2

Il problema è che si sta solo alla ricerca di TextBox oggetti in questa linea:

If TypeOf (myControl) Is TextBox Then 

Poiché il controllo MaskedTextBox non eredita dalla classe TextBox, dovresti controllare questo tipo separatamente, in questo modo:

If (TypeOf (myControl) Is TextBox) Or (TypeOf (myControl) Is MaskedTextBox) Then 

Tuttavia, dal momento che entrambi ereditare dalla classe TextBoxBase, si può solo verificare la presenza che invece:

If TypeOf (myControl) Is TextBoxBase Then 
+0

ho cambiato in texboxbase, ma ignora ancora la maskedtexbox. – David

1

Prova questa:

If TypeOf myControl Is MaskedTextBox Then 
     If CType(myControl, MaskedTextBox).Text.Equals(String.Empty) Then 
      MessageBox.Show(String.Format("Please Fill the following Textboxes: {0}", String.Join(",", myControl.Name))) 
     End If 
     If CType(myControl, MaskedTextBox).Text.Equals(String.Empty) Then 
      Exit Sub 
     End If 
End If 
+0

C'è un modo per assicurarsi che il controllo segua l'ordine di tabulazione invece di selezionare caselle casuali? c'è anche un modo per mostrare nella messagebox una descrizione invece della proprietà .Name? per esempio per mostrare Shift invece di txtShift. Grazie – David

+0

Scusa, non lo so ... Penso che il numero di indice per i controlli sia l'ordine in cui sono stati aggiunti al modulo se questo aiuta, probabilmente il ciclo seguirà questo ordine, ma non sono al 100% su che –

+0

non sono sicuro della tua seconda domanda. Se il nome del tuo controllo è txtShift, dovresti capire come rimuovere il "txt", ovviamente ... forse puoi lavorare con quella prima lettera maiuscola in qualche modo. Potrebbe esserci un modo migliore per farlo. Solo un pensiero fugace –

1

testato, ma invece di controllare contro string.empty, potreste controllare contro la proprietà Mask di MaskedTextBox.

If myControl.Text.Equals(myControl.Mask) Then 
    MessageBox.Show(String.Format("Please Fill the following Textboxes: {0}", String.Join(",", myControl.Name))) 
End If 
Problemi correlati