Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB.NET/2010] Convalida controllo

    Ciao a tutti,
    ho un problema di convalida di una textbox nella mia applicazione in WPF.
    Nella Window ho un Listbox che contiene i valori univoci della colonna di un dataset e delle TextBox che possono modificare i valori della riga del dataset. Quando la riga viene aggiornata correttamente l'applicazione mi restituisce un msgbox di conferma di avvenute modifiche (Dopo aver cliccato su un button). Ho creato nel codice XAML una risorsa che visualizza un messaggio di errore se la convalida del textBox che va a modificare la colonna contenente il valore univoco non va a buon fine. Il messaggio di mancata convalida appare ma l'applicazione non si ferma, continua a leggere le istruzioni nel codice come se niente fosse successo. La riga non viene aggiornata ma mi appare anche il messaggio che le modifiche sono state apportate quando invece non è cosi. In pratica non riesco a fermare l'applicazione in caso di mancata convalida del TextBox. Come posso fare?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Come sempre, se non mostri il codice, non si può valutare solo dal tuo "racconto" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Hai ragione
    Questo è il codice VB. Ho intercettato tutte le eccezioni ma non riesco ad intercettare questa perché la gestisce il textBox...

    codice:
        Private Sub ButtonModifica_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles ButtonModifica.Click
            Dim Conferma = MsgBox("Applico modifiche?", vbYesNo)
            Select Case Conferma
                Case vbYes
                    If IndirizzoComboBox.SelectedIndex = -1 Then
                        MsgBox("Record non trovato")
                        InfoScuolaEntityViewSource.View.MoveCurrentToFirst()
                        Exit Sub
                    End If
                    Try
                        If NomeScuolaTextBox.Text = Nothing Or IndirizzoTextBox.Text = Nothing Or _
                           MeccanograficoTextBox.Text = Nothing Or TelefonoTextBox.Text = Nothing Or _
                           EmailTextBox.Text = Nothing Then
                            Throw New ArgumentNullException
                        End If
                    Catch ex As ArgumentNullException
                        MsgBox("Non sono ammessi campi vuoti")
                        DbScuoleDataSet.RejectChanges()
                        Exit Sub
                    End Try
                    Try
                        TelefonoTextBox.Text = CLng(TelefonoTextBox.Text)
                    Catch ex As InvalidCastException
                        MsgBox("Numero di telefono non valido")
                        DbScuoleDataSet.RejectChanges()
                        Exit Sub
                    End Try
                    DbScuoleDataSetInfoScuolaEntityTableAdapter.Update(DbScuoleDataSet)
                    MsgBox("Modifiche apportate")
                Case vbNo
                    DbScuoleDataSet.RejectChanges()
                    MsgBox("Modifiche non apportate")
            End Select
        End Sub
    
    End Class
    Questo è il codice XAML riguardante lo stile del textBox e fa apparire un punto esclamativo in caso di mancata convalida. Ma secondo me può essere omesso perché si tratta di gestire qualche evento che non capisco nel codice VB. Per sicurezza posto il codice:

    codice:
    <Style x:Key="TextBoxStyle"
                   TargetType="{x:Type TextBox}">
                <Setter Property="FontSize"
                        Value="15" />
                <Setter Property="Height"
                        Value="28" />
                <Setter Property="Width"
                        Value="210" />
                <Setter Property="Validation.ErrorTemplate">
                    <Setter.Value>
                        <ControlTemplate>
                            <DockPanel LastChildFill="True">
                                <Ellipse DockPanel.Dock="Right" 
                                     ToolTip="{Binding ElementName=myTextbox, 
                                         Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
                                     Width="15" Height="15" 
                                     Margin="-25,0,0,0"
                                     StrokeThickness="1" Fill="Red" >
                                    <Ellipse.Stroke>
                                        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                                            <GradientStop Color="#FFFA0404" Offset="0"/>
                                            <GradientStop Color="#FFC9C7C7" Offset="1"/>
                                        </LinearGradientBrush>
                                    </Ellipse.Stroke>
                                    <Ellipse.Triggers>
                                        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                                            <BeginStoryboard Storyboard="{StaticResource FlashErrorIcon}"/>
                                        </EventTrigger>
                                    </Ellipse.Triggers>
                                </Ellipse>
                                <TextBlock DockPanel.Dock="Right" 
                                    ToolTip="{Binding ElementName=myControl, 
                                         Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
                                    Foreground="White"
                                    FontSize="11pt" 
                                    Margin="-15,5,0,0" FontWeight="Bold">!
                                <TextBlock.Triggers>
                                    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                                        <BeginStoryboard Storyboard="{StaticResource FlashErrorIcon}"/>
                                    </EventTrigger>
                                </TextBlock.Triggers>
                                </TextBlock>
                                <Border BorderBrush="Red" BorderThickness="1">
                                    <AdornedElementPlaceholder Name="myControl"/>
                                </Border>
                            </DockPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="Validation.HasError" Value="true">
                        <Setter Property="ToolTip"
                            Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                            Path=(Validation.Errors)[0].ErrorContent}"/>
                    </Trigger>
                </Style.Triggers>
            </Style>

  4. #4

  5. #5
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    ciao,
    il punto è che tu non controlli se il textbox ha degli errori secondo i criteri della tabella (ovvero nessun dato duplicato), questo perché, come hai detto tu non hai molto chiaro i meccanismi alla base del controllo degli errori di wpf...
    diciamo che non è magia

    comunque dovrebbe andare controllando il textbox con la classe statica "Validation" e il metodo "GetHasError(NomeTextBox)" che ti restituisce un bool che determina se ci sono errori secondo i criteri stabiliti.

    quindi nel tuo caso dovrebbe andare cosi :

    codice:
    Private Sub ButtonModifica_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles ButtonModifica.Click
    ....
    If Validation.GetHasError(tuaTextBox) Then
    'errore
    End If
    prova un po e facci sapere.

    Ciao

  6. #6
    Il problema è risolto. Ti ringrazio. Quindi la classe statica "Validation" controlla tutte le mancate convalide di un oggetto, è così? Ti ringrazio, ho concluso l'applicazione ( ma solo in locale sul mio pc )

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.