IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème de comparaison avec "sender"


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 44
    Par défaut Problème de comparaison avec "sender"
    Bonjour à tous.
    Tout d'abord, je précise que je "programme" sous visual basic .NET version 7.1.3088.

    Voilà, je me lance dans un petit jeu (un othello), avec des graphismes vraiment minimalistes, et je bloque. Voici mon code pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     Dim MesCases As New Collection
        Dim nblignes, nbcolonnes As Byte
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            nblignes = 8
            nbcolonnes = 8
     
            'suppression des membres précédents de la collection Mescases
            Dim i As Integer
            For i = 1 To MesCases.Count
                MesCases(i).dispose()
            Next i
     
            'Disposition des boutons
            For i = 0 To nblignes * nbcolonnes - 1
                Dim b As New Button
                b.Name = "Button" & i
                b.BackColor() = BackColor.Green
                MesCases.Add(b)
                Controls.Add(b)
                AddHandler b.Click, AddressOf Damierclick
                b.Height = 40
                b.Width = 40
                b.Left = 40 + 40 * (i Mod nbcolonnes)
                b.Top = 40 + 40 * (i \ nbcolonnes)
                If b.Name = "Button27" Then
                    b.BackColor() = BackColor.Black
                ElseIf b.Name = "Button36" Then
                    b.BackColor() = BackColor.Black
                ElseIf b.Name = "Button28" Then
                    b.BackColor() = BackColor.White
                ElseIf b.Name = "Button35" Then
                    b.BackColor() = BackColor.White
                End If
            Next i
        End Sub
    Voilà pour ce qui est du plateau de jeu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Private Sub Damierclick(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim i As Integer
    
            ' comparaison pour savoir si le bouton est déjà cliqué
            If sender.BackColor = BackColor.Green Then
                sender.BackColor() = BackColor.White
            End If
    
            ' on identifie l'index de la case cliquée
            Dim ind As Integer = 1
            While sender.name <> MesCases(ind).name
                ind = ind + 1
            End While
    
            ' on reconstitue les lignes et les colonnes d'après ind
            Dim lig, col As Integer
            lig = Int((ind - 1) / nbcolonnes) + 1
            col = ((ind - 1) Mod nbcolonnes) + 1
            Me.Text = "case n°" & ind & " - Ligne " & lig & " , colonne " & col
        End Sub
    Et voilà la suite qui permet de cliquer sur un bouton du damier! J'ai mis en gras le point sur lequel je bute. Mon problème est, pour le moment, d'arriver à faire savoir au programme si le bouton est vert (pas encore cliqué) et ainsi le faire devenir blanc ou noir. Mais cela ne semble pas possible avec "sender", donc comment faire?

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    LA variable sender est de type Object
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ByVal sender As System.Object
    donc tu dois caster dans le type qui va bien avant de t'en servir (dans le cas présent tout du moins).

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    et pour compléter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim b as button ' sans new
    b = directcast(sender,button) ' (si b n'est pas un button ca va planter)
    if b.backcolor 
      ...

    l'intellisense (autocomplétion du code dans vs) fonctionne sur le typage des variables


    exemple pour tester le type d'une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if typeof sender is button then
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 91
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    et pour compléter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim b as button ' sans new
    b = directcast(sender,button) ' (si b n'est pas un button ca va planter)
    if b.backcolor 
      ...

    l'intellisense (autocomplétion du code dans vs) fonctionne sur le typage des variables


    exemple pour tester le type d'une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if typeof sender is button then
    Quel est la différence entre Ctype et directcast ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 44
    Par défaut
    Ok, je vais aller voir tout ça! Merci!

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    Citation Envoyé par anat1212 Voir le message
    Quel est la différence entre Ctype et directcast ?

    directcast permet juste de caster un type en un autre, mais il faut que ces 2 types aient un lien de parenté, par héritage ou implémentation d'interface
    (à noter que toute classe hérite forcément de object en .net)


    ctype permet de faire des conversions de type, pour un decimal en long par exemple, ces types sont 2 choses différentes
    dans le cas d'une parenté, ctype a le meme effet que directcast, mais est un poil plus lent
    dans les 2 cas ca reste inférieur à un dixième de milliseconde je pense, donc c'est pas bien grave non plus, et directcast est un peu plus propre en POO aussi
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo