Validace Textboxů   zodpovězená otázka

VB.NET

Dobrý den,

potřeboval bych poradit jak zvalidovat sadu textboxů.

Na formuláři jsou 3 textboxy, do všech se musí zadat tři hodnoty Double, aby bylo možné pracovat s formulářem dál.

Na událost LostFocus prvního udělám validaci a pokud je číslo zadané špatně potřebuji, aby se fokus vrátil do toho samého okna.

private sub tb1(ByVal sender As Object, ByVal e As System.EventArgs) Handles tb1.LostFocus
if not validaceOk then
ctype(sender,textbox).focus()
end_if
end sub

Tady mám problém.

Nevím proč mi fokus přejde na další prvek ve formuláři (který je ale další ověřovaný textbox, a až potom se vrací zpět na původní prvek). Na druhém textboxu je ovšem také validace a focus se přehazuje z jednoho prvku na druhý dokud nedojde k chybě.

Nevíte jak z toho ven ?

Jo a pracuji v CF.NET takže nemém k dispozici validatory.

Jo a ještě věděl by někdo jaký je rozdíl mezi Ctype a DirectCast ?

Děkuji za jakoukoli pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

ad DirectCast/Ctype: http://www.vbnet.cz/clanek--85-tuning_an...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ve vb.net snad:

Je-li textbox prázdný, nejde dál a otravuje s vyplněním:

    Private Sub TextBoxes_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) _
        Handles TextBox1.Validating, TextBox2.Validating, TextBox3.Validating
        If CType(sender, TextBox).Text = "" Then e.Cancel = True
    End Sub

Zřejmě ale nelze použít Validating event...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Výše uvedený kód nedoporučuji:

CType je pomalejší než DirectCast, "" je pomalejší než String.Empty a .Text = "" nezahrnuje případ, kdy .Text bude Nothing (použít statickou metodu String.IsNullOrEmpty).

A podle MSDN je událost Validating dostupná i na mobilních zařízeních.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Moc díky za kritická doporučení

a připomínky včetně výkladu.

Nedalo se to nezkusit a dle vašeho

příspěvku ověřit tři textboxy:

Imports System.Windows.Forms
Public Class Form2
    Dim tb As TextBox
    Public Sub New()
        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        Const dist As Integer = 4
        For i As Integer = 1 To 3
            tb = New TextBox
            With tb
                .Name = "TextBox" & i
                .Top = (i - 1) * .Height + i * dist
                .Left = dist
            End With
            Me.Controls.Add(tb)
            AddHandler tb.Validating, AddressOf TextBoxes_Validating
        Next
    End Sub

    Private Sub TextBoxes_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
        Dim n As Double
        tb = DirectCast(sender, TextBox)
        If Not Double.TryParse(tb.Text, n) Then
            'Číslo nevyhovuje formátu desetinných čísel pro
            'formátovací kulturu aktuálního vlákna.
            e.Cancel = True
        End If
    End Sub
End Class
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Proč nepoužíváte událost k validaci určenou?

Private Sub tb1(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles tb1.Validating
  Dim n As Double
  If Not Double.TryParse(tb1.Text, n) Then
    'Číslo nevyhovuje formátu desetinných čísel pro
    'formátovací kulturu aktuálního vlákna.
    e.Cancel = True
  End If
End Sub

CType se používá k explicitní konverzi typů a je kompilováno inline. Oba typy musí být vzájemně konvertovatelné, jinak dojde k vyjímce.

DirectCast je konverze založená na dědičnosti a implementaci a je výrazně rychlejší než CType. Mezi typy musí existovat dědičný vztah nebo jeden typ musí implementovat druhý, jinak dojde k vyjímce.

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback