Le bouclage par le biais de Contrôles VB.NET
Je suis entrain de créer un programme d'échecs. Et il est composé de soixante-quatre cases de l'image avec une alternance de noir et de blanc, couleurs d'arrière-plan.
J'ai nommé pba1
, pba2
, pbb1
, pbb2
, pbc1
et ainsi de suite.
Maintenant, je veux faire une boucle par seulement les noirs, par exemple, je veux faire une boucle par seulement, pba1, pbb2, pbc3 et ainsi de suite.
Comment puis-je créer une boucle dans VB.NET?
Je connais la façon de faire une boucle par nommés de la même façon les contrôles, mais je ne suis pas en mesure de s'adapter cette méthode pour mon problème. Pouvez-vous m'indiquer une solution?
EDIT: Dans pba1, le pb est synonyme de zone d'image, et a1 représente le carré. Juste au cas où, vous vous demandez pourquoi un tel nom.
EDIT: découvrez cette réponse
- WinForms? WPF? ASP.NET?
- Avez-vous des classes de modèle pour représenter l'état de la partie et le conseil d'administration distincte de la logique d'affichage et de contrôle? Si non, vous devriez.
- Son winforms. Et je n'ai pas de classes pour représenter l'état de jeu. Son contrôlé par un tableau.
Vous devez vous connecter pour publier un commentaire.
Générer des contrôles au moment de la conception via le Concepteur de Formulaires n'a de sens que pour les modèles qui bénéficient le concepteur de formulaires.
Dans votre cas, il vous suffit de 64 uniforme des boîtes en 8 rangées de 8. Ne pas utiliser le Concepteur de Formulaires pour cela, créer les contrôles lors de l'exécution, et ne pas leur donner des noms comme
pba1
, il suffit de les placer dans une structure de données (tel qu'un 8x8 de matrice):De cette façon, vous pouvez accéder aux champs d'une manière ordonnée, sans avoir à passer par la
Form.Controls
collection.Visible
propriété des contrôles et de leur donner une position correcte?Location.X
etLocation.Y
séparément, qui ne fonctionne pas. Attribuer unPoint
, ou un ensembleTop
etLeft
séparément. Que ne lui donnera pas une erreur.Boucle à travers le PictureBox dans votre ControlCollection et de test pour les BackColor. J'ai utilisé le Formulaire de ControlCollection, si ils sont dans un autre type de conteneur de contrôle de l'utiliser.
De Base sur les informations supplémentaires que vous avez donné dans votre réponse, la raison de votre exemple n'est pas le travail, c'est que les Contrôles Nom est une Chaîne de caractères et vous êtes comparant pour le Contrôle PictureBox pas le Nom de la commande.
Vous pouvez essayer d'utiliser le
de la Balise
de la Propriété au lieu de laName
de la commande, il sera plus propre et plus facile à lire. Je viens de mettre un 1 dans la PictureBox la Propriété Tag pour le Noir et un 0 pour le Blanc.Mettre tous les pictureboxes dans un 8x8 tableLayoutPanel (également utile pour la mise à l'échelle, etc). Puis
Bien sûr, vous pourriez aussi utiliser un tableau des carrés si vous avez ce qui est disponible.
Cela n'affectera pas les événements (pba1.cliquez sur etc).
C'est assez simple et il peut être lourd, mais il fonctionne. J'ai un formulaire avec 36 Cases. Cette méthode tire parti du fait que, lorsque vous copiez une case à cocher juste augmente le nombre du nom. J'ai fini avec 36 cases à cocher nommée "CheckBox1" thru Checkbox36. La Fonction retourne une case à cocher, qui peut être utilisé pour régler ou de lire toute la propriété.