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 :

Création d'une grille


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
    Avril 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 19
    Par défaut Création d'une grille
    Bonjour,

    Je cherche à créer une grille 10*10 en Label afin de faire un jeu de bataille navale.
    Voici mon code, je ne comprends pas du tout pourquoi il ne marche pas.
    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
    Public Class Form2
        Public X, Y As Integer
        Public Label(10, 10) As Label
        Public Int(10, 10) As Integer
        Public LabelName As String
        Dim A, B As Integer
    Private Sub B1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B1.Click
     
            For J As Integer = 0 To 9
                For I As Integer = 0 To 9
                    A = 360 + (30 * I)
                    B = 110 + (30 * J)
                    Label(J, I) = New Label()
                    Label(J, I).AutoSize = False
                    Label(J, I).Location = New Point(A, B)
                    Label(J, I).BackColor = Color.Blue
                    Label(J, I).Size = New Point(30, 30)
                    Label(J, I).BorderStyle = BorderStyle.FixedSingle
                    Label(J, I).Visible = True
     
     
                Next
            Next
        End Sub
    End Class
    VB m'indique la phrase suivante pour chaque étape de la boucle :
    Une exception de première chance de type 'System.NullReferenceException' s'est produite dans WindowsApplication1.exe
    Si une ame charitable passe dans le coin et peut m'expliquer la cause de mon erreur (et pourquoi pas la solution car pas sur de comprendre la cause xD).
    Merci beaucoup pour votre aide et bon début de semaine

  2. #2
    Membre très actif
    Avatar de alex61
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2010
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 378
    Par défaut
    renseigne toi sur la propriété gridsize

    elle repondra peut etre a tes besoin
    cordialement

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Par défaut Me.Controls.Add()
    Il ne te manquait qu'une seule ligne ...
    Il ne te restait plus qu'ajouter les contrôles créés ... à la feuille !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    For J As Integer = 0 To 9
            For I As Integer = 0 To 9
                    A = 360 + (30 * I)
                    B = 110 + (30 * J)
                    Label(J, I) = New Label()
                    Label(J, I).AutoSize = False
                    Label(J, I).Location = New Point(A, B)
                    Label(J, I).BackColor = Color.Blue
                    Label(J, I).Size = CType(New Point(30, 30), Size)
                    Label(J, I).BorderStyle = BorderStyle.FixedSingle
                    Label(J, I).Visible = True
                    Me.Controls.Add(Label(J, I))
                Next
            Next
    Ce code fonctionne

    Précision : Si cette ligne n'existe pas, cela ne provoque pas d'erreur (mais la grille n'est pas affichée)

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    Faire une grille avec des Labels, pourquoi pas. Je vous propose une autre méthode pour dessiner une grille avec des primitives graphiques. Ce code est bien sur à adapter pour peindre les éléments de la grille etc ...

    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
    Public Function GrilleRects(ByVal nbcol() As Single, ByVal nbligne() As Single, ByVal pdep As PointF) As RectangleF()
            Dim nbc As Integer = UBound(nbcol) + 1
            Dim nbli As Integer = UBound(nbligne) + 1
     
            Dim res() As RectangleF = New RectangleF() {}
            ReDim res(nbc * nbli - 1)
     
            Dim pd As New PointF(pdep.X, pdep.Y)
     
            res(0) = New RectangleF(pd.X, pd.Y, nbcol(0), nbligne(0))
     
            For i = 1 To nbc - 1
                pd.X = pd.X + res(i - 1).Width
                res(i) = New RectangleF(pd.X, pd.Y, nbcol(i), nbligne(0))
            Next
     
            For i = 1 To nbli - 1
                pd.Y = pd.Y + nbligne(i - 1)
                pd.X = pdep.X
     
                For j = 0 To nbc - 1
                    res(i * nbc + j) = New RectangleF(res(j).Left, pd.Y, res(j).Width, nbligne(i))
                Next
            Next
     
            GrilleRects = res
        End Function

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 19
    Par défaut
    Merci beaucoup nanar 21, ta ligne a effectivement résolu mon problème. Dois je lancer cette instruction à chaque fois que je modifie mes panels?

    Geo2A, je te remercie aussi de ta solution mais je ne suis pas assez avancé dans le sujet pour comprendre ce que tu m'as dis :s.

    Par contre maintenant je me demande si il est possible de surveiller l'évènement clique de la souris sur le label
    Car il est impossible de faire un truc si simple que ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Label(I,J)_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label(I,J).Click
        End Sub
    Est ce possible à faire??

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Par défaut AddHandler
    Pour que tes labels créés dynamiquement réagissent à un événement tel qu'un clic, il faut préciser pour chaque objet créé, le type d'événement (ici l'événement Click) auquel il doit réagir, et l'adresse de la procédure contenant le code à exécuter si l'événement (ici le clic) se produit

    Il faut donc ajouter dans ta boucle un AddHandler ...

    Il faut aussi ajouter une procédure

    Et, comme cette procédure doit identifier l'objet qui a reçu l'événement, le plus simple est d'utiliser la propriété tag de l'objet créé et d'y mettre une référence unique


    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
    38
    39
       Private Sub B1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B1.Click
    
            For J As Integer = 0 To 9
                For I As Integer = 0 To 9
                    A = 360 + (30 * I)
                    B = 110 + (30 * J)
                    Label(J, I) = New Label()
                    Label(J, I).AutoSize = False
                    Label(J, I).Location = New Point(A, B)
                    Label(J, I).BackColor = Color.Blue
                    Label(J, I).Size = CType(New Point(30, 30), Size)
                    Label(J, I).BorderStyle = BorderStyle.FixedSingle
                    Label(J, I).Visible = True
    
                    ' L'objet est identifié par une string
                    ' Cette string est affectée à la propriété Tag de l'objet créé
                    Label(J, I).Tag = "label " & CStr(J) & "," & CStr(I)
    
                    ' Ajouter l'objet créé à la feuille
                    Me.Controls.Add(Label(J, I))
    
                    ' Ajouter un type événement, (ici .Click) pour l'objet créé
                    ' Et indiquer le nom de la procédure à exécuter lorsque cet événement se produit
                    AddHandler Label(J, I).Click, AddressOf ma_procédure
    
                Next
            Next
    
        End Sub
    
        Private Sub ma_procédure(ByVal sender As System.Object, ByVal e As System.EventArgs)
    
            'Créer un objet de même type que l'émetteur (sender)
            Dim etiquette As Label = CType(sender, Label)
    
            'Utiliser l'objet créé (dans cette procédure)
            MessageBox.Show(etiquette.Tag.ToString)
    
        End Sub
    Si le rôle des labels est de réagir un clic de souris, pourquoi ne pas créer des boutons ?

Discussions similaires

  1. Problème dans la création d'une grille de Sudoku
    Par Aurelienjjj dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/02/2013, 17h40
  2. [Débutant] Création d'une grille de loto
    Par Snowhite dans le forum C#
    Réponses: 3
    Dernier message: 15/06/2012, 12h50
  3. Aide sur création d'une grille de menu
    Par AAWOOPY56 dans le forum AIX
    Réponses: 2
    Dernier message: 21/01/2010, 12h20
  4. Création d'une Grille pour création d'un Schema
    Par ben_ghost dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 15/10/2007, 16h08
  5. Création dynamique colonne d'une grille
    Par Maglight dans le forum Composants VCL
    Réponses: 3
    Dernier message: 29/11/2005, 15h31

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