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 :

Directcast du message précédent


Sujet :

VB.NET

  1. #21
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par pascb423 Voir le message
    en fait, il y a au début du lancement du programme quelques textbox avec des chiffres choisi aléatoirement et le but de la fonction ordi est de trouver à coté des chiffres sur le plateau le plus haut calcul pour additionner le chiffre qui est sur le plateau avec celui que l'ordi va mettre, voilà
    Super clair

  2. #22
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par pascb423 Voir le message
    en fait, il y a au début du lancement du programme quelques textbox avec des chiffres choisi aléatoirement et le but de la fonction ordi est de trouver à coté des chiffres sur le plateau le plus haut calcul pour additionner le chiffre qui est sur le plateau avec celui que l'ordi va mettre, voilà
    J'avais compris que tu voulais faire des calculs d'ajout en croix avec les cases (textbox) pour trouver le résultat de calcul maxi. (mais je croyais que tu voulais ajouter toutes les valeurs)

    Bon, Résumons, nous avons un plateau de 64 cases (textbox) de 8x8
    Des nombres sont placé aléatoirement sur quelques cases (dans les textbox).
    On parcours toutes les cases.
    Si la case (textbox) est vide, on recherche le plus grand nombre dans les cases (textbox) adjacentes (haut, bas, droite, gauche) et on lui ajoute le nombre que l'ordi a généré automatiquement. Ce résultat est mis dans cette case (textbox) vide. On continu la boucle.

    Avant de se lancer dans ce genre de chose, on réfléchi sur papier, on met une méthode/algorithme au point, et quand elle/il fonctionne, on code.

    Tu as plusieurs approche.
    - Tu traites tous les cas individuellement (très lourd - ce que tu veux éviter)
    - tu fais une table des traitements que tu interprétes ensuite par code (encore assez lourd, puisque tu doit référencer tous les cas)
    - tu crés un algorithme de traitement (plus complexe - mais moins de code)
    - tu fais un mixe des solutions pour simplifier

    Une orientation parmis d'autres
    - tu traites les 4 angles a part (4 méthodes)
    - tu traites les 4 bords à part (4 méthodes - 2 si tu réfléchis bien - voire même une - 3 si tu veux suivre une logique de parcours des cases linéairement)
    - tu traite le centre (une méthode)

    [Edit]
    Autre orientation
    Un algo qui traite tout,
    Il suffit de vérifier les bords (avec des if) et tu ne traites pas les zones hors plateau
    [/Edit]

    Décompose tes traitements
    - recherche du plus grand nombre et calcul.
    - contrôle du résultat du calcul afin d'ajuster celui-ci suivant les contrainte de ton/tes labels et nouveau résultat.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #23
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Si la case (textbox) est vide, on recherche le plus grand nombre dans les cases (textbox) adjacentes (haut, bas, droite, gauche) et on lui ajoute le nombre que l'ordi a généré automatiquement. Ce résultat est mis dans cette case (textbox) vide.
    Si c'est le fonctionnement que tu attends.

    L'init
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub frmJeuNombreAleatoire_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            rempliPlateau()
        End Sub
        Private GenerateurNombre As System.Random = New System.Random()
        Sub rempliPlateau()
            Dim n As Integer = 0
            For x As Integer = 1 To 64
                n = GenerateurNombre.Next(1, 50)
                If n Mod 3 = 0 Then Panel1.Controls("TextBox" & x).Text = n.ToString
            Next
        End Sub
    recherche le plus grand nombre dans les cases
    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
        Function CalculCase(UneCase As Integer) As Integer
            Dim val As Integer = 0
            ' calcul case haut
            If UneCase > 8 Then
                If (Panel1.Controls("TextBox" & UneCase - 8).Text <> "") AndAlso (Panel1.Controls("TextBox" & UneCase - 8).Text > val) Then val = Panel1.Controls("TextBox" & UneCase - 8).Text
            End If
            ' calcul case bas
            If UneCase < 57 Then
                If (Panel1.Controls("TextBox" & UneCase + 8).Text <> "") AndAlso (Panel1.Controls("TextBox" & UneCase + 8).Text > val) Then val = Panel1.Controls("TextBox" & UneCase + 8).Text
            End If
            ' calcul case gauche
            If UneCase Mod 8 <> 1 Then
                If (Panel1.Controls("TextBox" & UneCase - 1).Text <> "") AndAlso (Panel1.Controls("TextBox" & UneCase - 1).Text > val) Then val = Panel1.Controls("TextBox" & UneCase - 1).Text
            End If
            ' calcul case droite
            If UneCase Mod 8 <> 0 Then
                If (Panel1.Controls("TextBox" & UneCase + 1).Text <> "") AndAlso (Panel1.Controls("TextBox" & UneCase + 1).Text > val) Then val = Panel1.Controls("TextBox" & UneCase + 1).Text
            End If
            Return val
        End Function
    Appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            For i As Integer = 1 To 64
                If Panel1.Controls("TextBox" & i).Text = "" Then Panel1.Controls("TextBox" & i).Text = CalculCase(i) + GenerateurNombre.Next(1, 50)
            Next
        End Sub
    Voici donc une base de travail (remplace "TextBox" par "a")
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #24
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    @rvt26t: quelques petites remarques sur le code (rien de bien dramatique) ; tu fais appel à Randomize pour rien et tu as un random (r) défini au niveau de la classe qui ne sert à rien (mais qui devrait plutôt servir à remplacer les random définis dans les méthodes à chaque fois. De plus plutôt que de faire des tests sur les valeurs de UneCase pour les cas spécifiques ; pour ne pas directement appeler l'indéxeur Controls et vérifier qu'on n'obtient pas Nothing (ce qui éliminera le cas où du plantage sur un controle mal nommé donc non-trouvé au passage) ?

    Sinon j'ai toujours pas compris pourquoi un tel niveau de complexité ; déjà un code qui repose sur la manière de nommer les controles c'est pas la panacée (je dirais même que c'est jamais bon mais c'est déjà plus subjectif).
    Pourquoi ne pas "simplement" utiliser un TableLayoutPanel avec 8 lignes et 8 colonnes en mettant un TextBox/Label/Whatever dedans ; après il suffira juste de boucler sur les éléments du TableLayoutPanel (et l'accès aux éléments mitoyens en sera également simplifié)

    Cordialement !
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  5. #25
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    L'utilisation du TableLayoutPanel est plus simple pour parcourir les éléments. Il faut avouer que si le besoin avait été exprimé clairement dés le début.
    Dans sa toute première discussion sur ce sujet, je lui avais montré avec une collection, lui indiquant que c'était plus propre. (que les noms)
    Citation Envoyé par pascb423 Voir le message
    j'ai 64 textbox nomées de a1 a a64
    j'aimerais tester dans une boucle les textbox vides
    Citation Envoyé par rv26t Voir le message
    Pour traiter proprement si tous les TextBox (et seulement ceux-ci) sont dans un conteneur (panel, groupbox (, form)).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Sub TestTextBox(ByVal conteneur As Control)
            For Each txt As TextBox In conteneur.Controls.OfType(Of TextBox)()
                If txt.Text = "" Then  MessageBox.Show("vide") Else MessageBox.Show("renseigné")
            Next
        End Sub
    Appel TestTextBox(Panel1).
    (Pour les nombres aléatoires j'avais changé et pas fait le ménage, désolé) correction faite.

    merci Sehnsucht
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Sélectionner le message précédent
    Par sam01 dans le forum Requêtes
    Réponses: 5
    Dernier message: 05/03/2010, 12h48
  2. afficher un message de confirmation quand l'utilisateur clique sur précédent
    Par gunsdeluxe dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/03/2007, 17h27
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. A lire impérativement avant de poster un message
    Par ok.Idriss dans le forum Demandes
    Réponses: 0
    Dernier message: 01/05/2002, 18h57

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