2010-11-18 6 views
2

J'écris une application dans VB.NET et je suis confronté au problème suivant. J'essaie de créer une interface qui permettra à l'utilisateur de sélectionner sa disponibilité en fonction de la période et des jours de la semaine. Je veux créer des contrôles case à cocher dans un formulaire tabulaire avec deux indices que je peux utiliser pour se référer à une certaine plage de temps et un jour de la semaine. La table ressemble à ceci:Tableau multidimensionnel de contrôles

 
      Sunday Monday Tuesday Wednesday Thursday Friday Saturday 
1:00am  [x]  [x]  [x]  [x]  [x]  [x]  [x] 
2:00am  [x]  [x]  [x]  [x]  [x]  [x]  [x] 
3:00am  [x]  [x]  [x]  [x]  [x]  [x]  [x] 
4:00am  [x]  [x]  [x]  [x]  [x]  [x]  [x] 

... et ainsi de suite. Donc dimanche à 01h00 serait 0,1 - Lundi @ 01h00 serait 0,2 -

J'ai suivi l'article trouvé here qui crée et expose un tableau de contrôle, mais il n'est pas multi- dimensionnel

Est-ce que quelqu'un connaît une manière similaire de générer dynamiquement des contrôles et de les stocker dans un tableau multidimensionnel dans VB.NET?

Merci d'avance!

Répondre

1

Vous pouvez envisager d'utiliser un TableLayoutPanel dans votre formulaire. Une méthode que vous pouvez utiliser est de créer les contrôles individuels, soit dans le concepteur si une grille de taille fixe, ou dans le code de programme pour une grille de taille variable, et les placer dans (ou les ajouter à) la grille cellules.

Si vous devez gérer les événements de clic, vous pouvez lier les événements de tous les contrôles à un seul gestionnaire (décrit dans l'article auquel vous avez lié). Ensuite, définissez la propriété tag de chaque contrôle pour refléter l'emplacement de la grille. Par exemple, si votre grille est inférieure à dix par dix, définissez la balise à l'aide d'un nombre entier avec la colonne dans le chiffre des dizaines et la ligne dans l'emplacement des unités. Dans la routine du gestionnaire, tou peut indiquer quel contrôle a été cliqué à l'aide de la propriété sender.tag. Après une lecture plus approfondie, il semble que vous pouvez utiliser la méthode TableLayoutPanel GetPositionFromControl pour obtenir la position du contrôle qui a déclenché l'événement: tableName.GetPositionFromControl (expéditeur). Je vais essayer cela dans mon code plus tard, peut-être que je peux me débarrasser des tags.

Si vous n'avez pas besoin de gérer les événements, vous pouvez utiliser la méthode TablelayoutPanel GetControlFromLocation pour accéder aux contrôles individuels. Donc, en fait, vous pouvez utiliser TableLayoutPanel comme tableau de contrôle bidimensionnel sans avoir à coder votre propre tableau.

3

Un contrôle est un objet coûteux. Vous en avez trop ici, peindre le formulaire commencera à devenir nettement plus lent. Utilisez plutôt un DataGridView, ajoutez des colonnes de type DataGridViewCheckBoxColumn.

+0

Bon, je vais y jeter un coup d'oeil. Merci –

+0

Bien que cette réponse ne reflète pas votre question, c'est la meilleure solution. Vous accédez ensuite à des cellules spécifiques via les propriétés Ligne puis Cellule. – AMissico