none
Question boucle RRS feed

  • Question

  • Bonjour voilà ma question :

    J'ai une boucle

     Dim n As Integer = 5
        Dim a As Integer = 9
        Do Until n = a
          Image1.Visible = True
          Image1.ImageUrl = "PICT006" & n & ".JPG"
          n = n + 1
        Loop
    

    Je voudrais savoir comment faire pour que lorsque n=a est que la boucle s'arrête , remettre n à 5 et repartir dans la boucle et ceci indéfiniment.

    Deuxieme question :

    Comment puis-je faire une pause de 5seconde juste après l'incrémentation avant de repartir dans la boucle? Il faut que j'utilise un timer mais je n'y arrive pas , d'avance merci.

    vendredi 26 novembre 2010 18:34

Réponses

  • Donc avec un TextBox et un Timer sur un formulaire je propose :

    Option Strict On
    
    Public Class Form1
     Const Max As Integer = 3
     Dim Current As Integer
     Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
      Timer1.Interval = CInt(TimeSpan.FromSeconds(5).TotalMilliseconds)
      Timer1.Start()
      TextBox1.Text = Current.ToString
     End Sub
     Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
      Current += 1
      TextBox1.Text = Current.ToString
      If Current >= Max Then Timer1.Stop()
     End Sub
    End Class
    

    Donc quand le formulaire se charge j'initialise le Timer à 5 s, je le démarre et j'affiche la valeur 0.

    Quand le timer se déclenche, j'incrémente la valeur et j'affiche cette nouvelle valeur. Si je suis arrivé à la dernière valeur je désactive le Timer.

    L'utilisation d'un Timer permet à l'utilisateur de garder la main.

    Le Option Strict On n'autorise que les conversions explicites (par exemple TotalMilliseconds retourne un double, je dois donc le convertir explicitement).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    dimanche 28 novembre 2010 17:33
    Modérateur

Toutes les réponses

  • Bonjour,

     

    Ce que vous demandez c'est facile a faire

    pour ce qui concerne le timer il suffit de le starté et le mettre en intervalle de 5 secondes (5000) cela donnerais quelle que chose comme ça

     

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Interval = 5000
        Timer1.Enabled = True
      End Sub
      Private n As Integer = 5
      Private a As Integer = 9
      Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
        If n = a Then
          n = 5
        End If
    
      End Sub

     

    Dans votre code ce n'est pas bon, car il y a plusieurs choses qui ne vont pas comme la boucle infini (on pourrais aussi faire une routine) car là dans votre cas "n" à un moment donné sera egale a "a" puis sortira de la boucle, donc pour faire une boucle infini c'est facile, il faut prendre une fix qui ne changera pas et donc ne sortira jamais de la boucle

    par exemple :

      Private n As Integer = 5
      Private a As Integer = 9
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        Do Until n = ""
          n += 1
          Threading.Thread.Sleep(5000) 'delais d'attente de 5 secondes
          If n = a Then
            n = 5
          End If
        Loop
      End Sub
    
    A bientot

     

     

     

     

     


    Cordialement, Troxsa
    vendredi 26 novembre 2010 19:14
    Auteur de réponse
  • Merci pour la réponse.

    en faite mon problème c'est que je fous ma boucle dans le load de la page donc sa fait que lorsque la page s'affiche la boucle est terminée , donc il faut que je démarre la boucle quand la page est déjà afficher , comment faire?
    vendredi 26 novembre 2010 22:28
  • Il faudra prendre l’événement SHOWN de la form

     

    Cordialement,


    Cordialement, Troxsa
    vendredi 26 novembre 2010 23:06
    Auteur de réponse
  • Merci pour la réponse. J'ai mis mon code dans l'événement Shown mais sa na rien changer , l'application attends que la boucle soit fini avant de démarrer ...

     

    Voici le code :

     Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        Dim n As Integer = 0
        Dim a As Integer = 10
    
        Do Until n = a
          Threading.Thread.Sleep(5000) 'delais d'attente de 5 secondes
          TextBox1.Text = n.ToString
          n = n + 1
        Loop
      End Sub

    samedi 27 novembre 2010 13:59
  • Bonjour,

    L'exécution de cette procédure ne se terminera qu'en arrivant sur "End Sub" ce qui n'est possible que si n=a.

    Je pense que le plus simple serait d'expliquer le but exact (j'ai l'impression que vous essayez une boucle pour remplacer le timer que vous n'arrivez pas à utiliser. Mais comme on semble tester ce qui est saisi par l'utilisateur, il y aurait d'autres moyens comme les évènements TextChanged ou Validating qui permettent de prendre la main après la saisie d'un TextBox par l'utilisateur).

    Je pense qu'il serait préférable d'expliquer ce que doit faire votre appli. plutôt que de demander de l'aide sur une solution qui semble ne pas être habituelle. Quelqu'un pourra alors sans doute vous indiquer une meilleure approche pour faire ce que vous voulez...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    samedi 27 novembre 2010 15:39
    Modérateur
  • Merci pour la réponse.

    Alors en faite dans mon application j'ai une textbox et je voudrais que cette textbox affiche un par un les nombre de 0 à x (x étant la variable "a" pas toujours  égal à 10) avec une pause de 5 seconde à chaque fois.

    Voila d'avance merci.

    dimanche 28 novembre 2010 13:52
  • Donc avec un TextBox et un Timer sur un formulaire je propose :

    Option Strict On
    
    Public Class Form1
     Const Max As Integer = 3
     Dim Current As Integer
     Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
      Timer1.Interval = CInt(TimeSpan.FromSeconds(5).TotalMilliseconds)
      Timer1.Start()
      TextBox1.Text = Current.ToString
     End Sub
     Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
      Current += 1
      TextBox1.Text = Current.ToString
      If Current >= Max Then Timer1.Stop()
     End Sub
    End Class
    

    Donc quand le formulaire se charge j'initialise le Timer à 5 s, je le démarre et j'affiche la valeur 0.

    Quand le timer se déclenche, j'incrémente la valeur et j'affiche cette nouvelle valeur. Si je suis arrivé à la dernière valeur je désactive le Timer.

    L'utilisation d'un Timer permet à l'utilisateur de garder la main.

    Le Option Strict On n'autorise que les conversions explicites (par exemple TotalMilliseconds retourne un double, je dois donc le convertir explicitement).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    dimanche 28 novembre 2010 17:33
    Modérateur
  • Tous marche niquel merci beaucoup 
    dimanche 28 novembre 2010 18:16
  • Bonjour,

    pour info il existe un programme qui renomme tous les fichiers comme on veut

    il existe une version gratuite

    http://www.sherrodcomputers.com/products_filerenamer.cfm

    Je l'utilise souvent pour renommer mes photos


    fred
    lundi 29 novembre 2010 14:50