none
Avoir le choix d'un contrôle par rapport à un autre. RRS feed

  • Discussion générale

  • Bonjour,

    C'est encore et toujours moi, grâce à moi les gens qui se posent telle ou telle question n'auront plus à vous embêter, je me charge de ça :)

    Plus sérieusement j'ai un problème pour ne pas changer mes habitudes.

    Voici un Screenshots de mon Pattern PassCode :

    Voici ce que je souhaite réaliser. Pouvoir de 0 aller à 8 puis à 9 sans pouvoir revenir sur le 7 par contre pouvoir aller de 0 à 7 puis de 7 à 8 et de 8 à 9 sans problème, en gros lorsque le trait rouge qui va de 0 à 8 et celui allant de 8 à 9 sont visibles comme sur le Screenshots alors, on ne peut pas revenir sur le 7 via le trait vert qui va de 8 à 7. Pour le trait rouge allant de 0 à 8 et ce lui allant de 0 à 7, je sais comment faire pour n'avoir qu'un seul choix possible, mais lorsque j'ai deux choix possible ou plus, je ne parviens pas à définir un système qui aurait pour but de dire, si tel ou tel trait est visible, alors le trait à l'opposé ou dans une diagonale ne doit pas être visible. C'est le même système que sur les portables, sauf qu'ici je peine à mettre ce système en place.

    Merci pour vos futurs réponses.

    JPR

    • Type modifié Aurel Bera jeudi 27 février 2014 08:00 discussion
    jeudi 20 février 2014 12:49

Toutes les réponses

  • Bonjour

    Ici c'est ce qu'on appelle an théorie des graphes.

    Si j’ai bien compris votre soucie vous devez avoir pour chaque buttons les connexions possibles.

    De l’autre cote, vous devez avoir tous les connexions déjà effectuées.  Et évidement quand vous êtes sur un buttons, vous devez afficher les connexions possibles pour le nœud mais éliminer ceux qui sont déjà faites.

    Si par exemple pour le nœud #8  vous avez connexions possibles = {4,5,6,7,9,0}. Maintenant si vous venez 0 -> 7 ->8  vous avez disponibles {4,5,6,9,0}

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 21 février 2014 11:31
  • Bonjour,

    Exactement, le problème est que je ne sais pas comment résoudre ce problème sur Visual Basic.

    Pour que mon programme fonctionne bien.

    Des idées?

    Merci d'avance pour vos réponses.

    JPR

    vendredi 21 février 2014 20:28
  • Bonjour

    Je voius propose ce code :

    Imports System.Collections.Generic
    Public Class Form1
        Public Class Transitions : Implements IEquatable(Of Transitions)
            Private pStart As Integer
            Private pStop As Integer
            Private WasVisited As Boolean = False
    
            Public Sub New(xStart As Integer, xStop As Integer)
                pStart = xStart
                pStop = xStop
                WasVisited = False
            End Sub
            Public Property StartElem As Integer
                Get
                    Return pStart
                End Get
                Set(value As Integer)
                    pStart = value
                End Set
            End Property
            Public Property StopElem As Integer
                Get
                    Return pStop
                End Get
                Set(value As Integer)
                    pStop = value
                End Set
            End Property
            Public Property ElemVisited As Boolean
                Get
                    Return WasVisited
                End Get
                Set(value As Boolean)
                    WasVisited = value
                End Set
            End Property
            Public Overloads Function Equals(c As Transitions) As Boolean _
          Implements IEquatable(Of Transitions).Equals
                If c Is Nothing Then
                    Return False
                End If
                Return ((Me.pStart = c.pStart And Me.pStop = c.pStop) Or (Me.pStart = c.pStop And Me.pStop = c.pStart))
            End Function
            '    Function CompareTo(ByVal obj As Object) As Integer Implements IComparable.CompareTo
            ' Dim c As Transitions = CType(obj, Transitions)
            '     If (Me.pStart = c.pStart And Me.pStop = c.pStop) Or (Me.pStart = c.pStop And Me.pStop = c.pStart) Then
            '         Return 0
            '    Else
            '       Return 1
            '   End If
    
            ' End Function
    
    
        End Class
        Public Class TheList
            Private pTrans As New List(Of Transitions)
            Public Sub New()
                pTrans.Add(New Transitions(1, 2))
                pTrans.Add(New Transitions(1, 4))
                pTrans.Add(New Transitions(1, 5))
                pTrans.Add(New Transitions(2, 3))
                pTrans.Add(New Transitions(2, 4))
                pTrans.Add(New Transitions(2, 5))
                pTrans.Add(New Transitions(2, 6))
                pTrans.Add(New Transitions(3, 5))
                pTrans.Add(New Transitions(3, 6))
                pTrans.Add(New Transitions(4, 5))
                pTrans.Add(New Transitions(4, 7))
    
                pTrans.Add(New Transitions(4, 8))
                pTrans.Add(New Transitions(5, 6))
                pTrans.Add(New Transitions(5, 7))
                pTrans.Add(New Transitions(5, 8))
                pTrans.Add(New Transitions(5, 9))
                pTrans.Add(New Transitions(6, 8))
                pTrans.Add(New Transitions(6, 9))
                pTrans.Add(New Transitions(7, 8))
                pTrans.Add(New Transitions(7, 0))
                pTrans.Add(New Transitions(8, 0))
                pTrans.Add(New Transitions(8, 9))
                pTrans.Add(New Transitions(9, 0))
            End Sub
    
            Public Function findFreeNodes(ByVal cNode As Integer) As List(Of Integer)
                Dim ret As New List(Of Integer)
                For Each tr As Transitions In pTrans
                    If tr.StartElem = cNode And tr.ElemVisited = False Then
                        ret.Add(tr.StopElem)
                    End If
                    If tr.StopElem = cNode And tr.ElemVisited = False Then
                        ret.Add(tr.StartElem)
                    End If
                Next
    
                Return ret
    
            End Function
    
            Public Sub setNodeVisited(ByVal nodeVisited As Transitions)
                For Each tr As Transitions In pTrans
                    If (tr.StartElem = nodeVisited.StartElem And tr.StopElem = nodeVisited.StopElem) Or (tr.StartElem = nodeVisited.StopElem And tr.StopElem = nodeVisited.StartElem) Then
                        tr.ElemVisited = True
                    End If
                Next
            End Sub
    
        End Class
        
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        
    
            ' pTrans.Remove(New Transitions(0, 7))
            ' pTrans.Remove(New Transitions(8, 7))
            Dim laListe As New TheList
            laListe.setNodeVisited(New Transitions(0, 7))
            laListe.setNodeVisited(New Transitions(7, 8))
            laListe.setNodeVisited(New Transitions(9, 8))
            laListe.setNodeVisited(New Transitions(9, 5))
    
            Dim CurrentElement As Integer = 5
    
    
            For Each x As Integer In laListe.findFreeNodes(CurrentElement)
                Console.WriteLine("Available node " + x.ToString)
            Next
    
    
        End Sub
    End Class

    On ajoute tous les transitions possibles une seule fois (7- 8 et pas 7 - 8  et 8 - 7) et on déclare les chemins utilisés une fois avec "setNodeVisited".

    Dans cette exemple on s'est déplacé de 0 - 7, 7- 8, 8- 9 et 9- 5 .

    Je ne suis pas sûr que c’est 100% ce que vous voulez, mais sera facile à modifier. 


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    • Modifié Aurel Bera lundi 24 février 2014 15:47
    lundi 24 février 2014 15:46
  • Bonjour

    Un petit retour SVP?

    Merci!

    Cordialement, 


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 26 février 2014 08:15