Tutoriel de programmation C# - Programmation de Winforms avancés en C#

01 sur 10

Utilisation des contrôles dans Winforms - Avancé

WinForm avec ComboBox

Dans ce didacticiel de programmation C #, je vais me concentrer sur les contrôles avancés tels que ComboBoxes, Grids et ListViews et vous montrer comment vous les utiliserez très probablement. Je ne touche pas aux données et à la liaison jusqu'à un tutoriel ultérieur. Commençons par un contrôle simple, un ComboBox.





ComboBox Winform Control

Au cœur d'un combo se trouve une collection d'éléments et le moyen le plus simple de le remplir est de déposer un combo à l'écran, de sélectionner les propriétés (si vous ne pouvez pas voir les fenêtres de propriétés, cliquez sur Afficher dans le menu supérieur, puis sur Fenêtre de propriétés), recherchez des éléments et cliquez sur le bouton représentant des points de suspension. Vous pouvez ensuite taper les chaînes, compiler le programme et tirer le combo vers le bas pour voir les choix.

  • Une
  • Deux
  • Trois

Maintenant, arrêtez le programme et ajoutez quelques chiffres supplémentaires : quatre, cinq... jusqu'à dix. Lorsque vous l'exécuterez, vous ne verrez que 8 car c'est la valeur par défaut de MaxDropDownItems. N'hésitez pas à le régler sur 20 ou 3, puis exécutez-le pour voir ce qu'il fait.



C'est ennuyeux que lorsqu'il s'ouvre, il indique comboBox1 et que vous puissiez le modifier. Ce n'est pas ce que nous voulons. Recherchez la propriété DropDownStyle et remplacez DropDown par DropDownList. (C'est un combo !). Maintenant, il n'y a pas de texte et il n'est pas modifiable. Vous pouvez sélectionner l'un des numéros, mais il s'ouvre toujours en blanc. Comment sélectionnons-nous un nombre pour commencer ? Eh bien, ce n'est pas une propriété que vous pouvez définir au moment de la conception, mais l'ajout de cette ligne le fera.

comboBox1.SelectedIndex =0 ;

Ajoutez cette ligne dans le constructeur Form1(). Vous devez afficher le code du formulaire (dans l'Explorateur de solutions, cliquez avec le bouton droit sur From1.cs et cliquez sur Afficher le code. Recherchez InitializeComponent() et ajoutez cette ligne immédiatement après.



Si vous définissez la propriété DropDownStyle du combo sur Simple et exécutez le programme, vous n'obtiendrez rien. Il ne sélectionnera pas, ne cliquera pas ou ne répondra pas. Pourquoi? Parce qu'au moment de la conception, vous devez saisir la poignée d'étirement inférieure et agrandir l'ensemble du contrôle.

Exemples de code source

  • Télécharger les exemples (code postal)

A la page suivante : Winforms ComboBoxes Suite

02 sur 10

Examen des ComboBox (suite)

Travailler avec une ComboBox

Dans l'exemple 2, j'ai renommé le ComboBox en combo, changé le combo DropDownStyle en DropDown afin qu'il puisse être modifié et ajouté un bouton Ajouter appelé btnAdd. J'ai double-cliqué sur le bouton d'ajout pour créer un gestionnaire d'événements btnAdd_Click() et ajouté cette ligne d'événement.

vide privé btnAdd_Click (expéditeur d'objet, System.EventArgs e)
{
combo.Items.Add(combo.Text) ;
}

Maintenant, lorsque vous exécutez le programme, tapez un nouveau numéro, dites Onze et cliquez sur Ajouter. Le gestionnaire d'événements prend le texte que vous avez tapé (dans combo.Text) et l'ajoute à la collection d'éléments du Combo. Cliquez sur le Combo et nous avons maintenant une nouvelle entrée Eleven. C'est ainsi que vous ajoutez une nouvelle chaîne à un Combo. En supprimer un est légèrement plus compliqué car vous devez trouver l'index de la chaîne que vous souhaitez supprimer puis le supprimer. La méthode RemoveAt illustrée ci-dessous est une méthode de collecte pour ce faire. il vous suffit de spécifier quel élément dans le paramètre Removeindex.



combo.Items.RemoveAt( RemoveIndex ) ;

supprimera la chaîne à la position RemoveIndex. S'il y a n éléments dans la liste déroulante, les valeurs valides sont comprises entre 0 et n-1. Pour 10 éléments, valeurs 0..9.

Dans la méthode btnRemove_Click, il recherche la chaîne dans la zone de texte en utilisant



int RemoveIndex = combo.FindStringExact( RemoveText ) ;

Si cela ne trouve pas le texte, il renvoie -1 sinon il renvoie l'index basé sur 0 de la chaîne dans la liste déroulante. Il existe également une méthode surchargée de FindStringExact qui vous permet de spécifier d'où vous commencez la recherche, de sorte que vous pouvez ignorer la première, etc. si vous avez des doublons. Cela peut être pratique pour supprimer les doublons dans une liste.

Cliquer sur btnAddMany_Click() efface le texte du combo puis efface le contenu de la collection Items du combo puis appelle combo.AddRange( pour ajouter les chaînes du tableau de valeurs. Après cela, il définit le SelectedIndex du combo sur 0. Cela montre le premier élément dans la liste déroulante. Si vous ajoutez ou supprimez des éléments dans un ComboBox, il est préférable de garder une trace de l'élément sélectionné. Définir SelectedIndex sur -1 masque les éléments sélectionnés.



Le bouton Ajouter des lots efface la liste et ajoute 10 000 numéros. J'ai ajouté des appels combo.BeginUpdate() et combo,EndUpdate() autour de la boucle pour empêcher tout scintillement de Windows essayant de mettre à jour le contrôle. Sur mon PC de trois ans, il faut un peu plus d'une seconde pour ajouter 100 000 numéros dans le combo.

A la page suivante Regarder ListViews



03 de 10

Utilisation de ListViews dans C# Winforms

L

Il s'agit d'un contrôle pratique pour afficher des données tabulaires sans la complexité d'une grille. Vous pouvez afficher les éléments sous forme d'icônes grandes ou petites, sous forme de liste d'icônes dans une liste verticale ou, plus utilement, sous forme de liste d'éléments et de sous-éléments dans une grille et c'est ce que nous allons faire ici.

Après avoir déposé un ListView sur un formulaire, cliquez sur la propriété columns et ajoutez 4 colonnes. Ce seront TownName, X, Y et Pop. Définissez le texte de chaque ColumnHeader. Si vous ne pouvez pas voir les en-têtes sur ListView (après avoir ajouté les 4), définissez la propriété View de ListView sur Details. Si vous affichez le code de cet exemple, naviguez jusqu'à l'endroit où il est écrit Code du concepteur de formulaire Windows et développez la région où vous voyez le code qui crée le ListView. Il est utile de voir comment le système fonctionne et vous pouvez copier ce code et l'utiliser vous-même.

Vous pouvez définir manuellement la largeur de chaque colonne en déplaçant le curseur sur l'en-tête et en le faisant glisser. Ou vous pouvez le faire dans le code visible après avoir développé la région du concepteur de formulaire. Vous devriez voir un code comme celui-ci :

Pour la colonne de population, les modifications du code sont répercutées dans le concepteur et vice versa. Notez que même si vous définissez la propriété Locked sur true, cela n'affecte que le concepteur et lors de l'exécution, vous pouvez redimensionner les colonnes.

Les ListViews sont également livrés avec un certain nombre de propriétés dynamiques. Cliquez sur (Propriétés dynamiques) et cochez la propriété souhaitée. Lorsque vous définissez une propriété comme étant dynamique, elle crée un fichier XML .config et l'ajoute à l'Explorateur de solutions.

Apporter des modifications au moment de la conception est une chose, mais nous devons vraiment le faire lorsque le programme est en cours d'exécution. Un ListView est composé de 0 ou plusieurs éléments. Chaque élément (un ListViewItem) a une propriété de texte et une collection SubItems. La première colonne affiche le texte de l'élément, la colonne suivante affiche SubItem[0].text puis SubItem[1].text et ainsi de suite.

J'ai ajouté un bouton pour ajouter une ligne et une zone d'édition pour le nom de la ville. Entrez n'importe quel nom dans la zone et cliquez sur Ajouter une ligne. Cela ajoute une nouvelle ligne à ListView avec le nom de la ville mis dans la première colonne et les trois colonnes suivantes (SubItems[0..2] ) sont remplies de nombres aléatoires (convertis en chaînes) en leur ajoutant ces chaînes.

Aléatoire R= nouveau Aléatoire() ;
ListViewItem LVI = list.Items.Add(tbName.Text) ;
LVI.SubItems.Add( R.Next(100).ToString()) ; // 0..99
LVI.SubItems.Add( R.Next(100).ToString()) ;
LVI.SubItems.Add((( 10+R.Next(10))*50).ToString());

A la page suivante : Mise à jour d'une ListView

04 sur 10

Mise à jour d'un ListView par programme

Clic droit sur le contrôle ListView

Par défaut, lorsqu'un ListViewItem est créé, il a 0 sous-éléments, ils doivent donc être ajoutés. Ainsi, non seulement vous devez ajouter ListItems à un ListView, mais vous devez également ajouter ListItem.SubItems au ListItem.

Suppression d'éléments ListView par programme

Définissez maintenant la propriété ListView Multiselect sur false. Nous ne voulons sélectionner qu'un seul élément à la fois, mais si vous souhaitez en supprimer plusieurs en une seule fois, c'est similaire, sauf que vous devez faire une boucle en sens inverse. (Si vous bouclez dans l'ordre normal et supprimez des éléments, les éléments suivants ne sont pas synchronisés avec les index sélectionnés).

Le menu du clic droit ne fonctionne pas encore car nous n'avons aucun élément de menu à afficher dessus. Faites donc un clic droit sur PopupMenu (sous le formulaire) et vous verrez le menu contextuel apparaître en haut du formulaire où l'éditeur de menu normal apparaît. Cliquez dessus et là où il est écrit Tapez ici, tapez Supprimer l'élément. La fenêtre des propriétés affichera un MenuItem donc renommez-le en mniRemove. Double-cliquez sur cet élément de menu et vous devriez obtenir la fonction de code du gestionnaire d'événements menuItem1_Click. Ajoutez ce code pour qu'il ressemble à ceci.

Si vous perdez de vue l'élément Supprimer, cliquez simplement sur le contrôle PopupMenu sous le formulaire dans le concepteur de formulaires. Cela le remettra en vue.

privé void menuItem1_Click (expéditeur de l'objet, System.EventArgs e)
{
ListViewItem L = liste.SelectedItems[0] ;
si (L != nul)
{
list.Items.Remove(L) ;
}
}

Cependant, si vous l'exécutez et n'ajoutez pas d'élément et ne le sélectionnez pas, lorsque vous faites un clic droit et obtenez le menu et cliquez sur Supprimer l'élément, cela donnera une exception car il n'y a pas d'élément sélectionné. C'est une mauvaise programmation, alors voici comment vous y remédier. Double-cliquez sur l'événement contextuel et ajoutez cette ligne de code.

vide privé PopupMenu_Popup (expéditeur d'objet, System.EventArgs e)
{
mniRemove.Enabled = (list.SelectedItems.Count > 0) ;
}

Il active uniquement l'entrée de menu Supprimer l'élément lorsqu'il y a une ligne sélectionnée.

A la page suivante

: Utilisation du DataGridView

05 de 10

Comment utiliser un DataGridView

L

Un DataGridView est à la fois le composant le plus complexe et le plus utile fourni gratuitement avec C#. Il fonctionne avec les sources de données (c'est-à-dire les données d'une base de données) et sans (c'est-à-dire les données que vous ajoutez par programmation). Pour le reste de ce didacticiel, je vais montrer comment l'utiliser sans sources de données. Pour des besoins d'affichage plus simples, vous pouvez trouver un ListView simple plus approprié.

Que peut faire un DataGridView ?

Si vous avez utilisé un ancien contrôle DataGrid, ce n'est qu'un de ceux sur les stéroïdes : il vous donne plus de types de colonnes intégrés, peut fonctionner avec des données internes et externes, plus de personnalisation de l'affichage (et des événements) et donne plus de contrôle. sur la gestion des cellules avec gel des lignes et des colonnes.

Lorsque vous concevez des formulaires avec des données de grille, il est plus courant de spécifier différents types de colonnes. Vous pouvez avoir des cases à cocher dans une colonne, du texte en lecture seule ou modifiable dans une autre et des numéros de cours. Ces types de colonnes sont également généralement alignés différemment avec des nombres généralement alignés à droite, de sorte que les points décimaux s'alignent. Au niveau de la colonne, vous pouvez choisir parmi Button, checkbox, ComboBox, Image, TextBox et Links. si cela ne suffit pas, vous pouvez définir vos propres types personnalisés.

Le moyen le plus simple d'ajouter des colonnes consiste à concevoir dans l'IDE. Comme nous l'avons vu précédemment, cela écrit simplement du code pour vous et lorsque vous l'avez fait plusieurs fois, vous préférerez peut-être ajouter le code vous-même. Une fois que vous avez fait cela plusieurs fois, cela vous donne un aperçu de la façon de le faire par programmation.

Commençons par ajouter quelques colonnes, déposez un DataGridView sur le formulaire et cliquez sur la petite flèche dans le coin supérieur droit. Cliquez ensuite sur Ajouter une colonne. Faites cela trois fois. Il fera apparaître une boîte de dialogue Ajouter une colonne dans laquelle vous définissez le nom de la colonne, le texte à afficher en haut de la colonne et vous permet de choisir son type. La première colonne est YourName et c'est la TextBox par défaut (dataGridViewTextBoxColumn). Définissez également le texte d'en-tête sur votre nom. Faites la deuxième colonne Age et utilisez un ComboBox. La troisième colonne est autorisée et est une colonne de case à cocher.

Après avoir ajouté les trois, vous devriez voir une rangée de trois colonnes avec un combo au milieu (Âge) et une case à cocher dans la colonne Autorisé. Si vous cliquez sur DataGridView, dans l'inspecteur de propriétés, vous devez localiser les colonnes et cliquer sur (collection). Cela fait apparaître une boîte de dialogue dans laquelle vous pouvez définir les propriétés de chaque colonne, telles que les couleurs de cellule individuelles, le texte de l'info-bulle, la largeur, la largeur minimale, etc. Si vous compilez et exécutez, vous remarquerez que vous pouvez modifier la largeur des colonnes et le temps d'exécution. Dans l'inspecteur de propriétés du DataGridView principal, vous pouvez définir AllowUser sur resizeColumns sur false pour éviter cela.

À la page suivante :

Ajout de lignes au DataGridView

06 de 10

Ajout de lignes au DataGridView par programmation

Définition du gestionnaire d

Nous allons ajouter des lignes au contrôle DataGridView dans le code et ex3.cs dans le fichier d'exemples contient ce code. Commencez par ajouter une zone TextEdit, un ComboBox et un bouton au formulaire avec le DataGridView dessus. Définissez la propriété DataGridView AllowUserto AddRows sur false. J'utilise également des étiquettes et j'ai appelé la combobox cbAges, le bouton btnAddRow et le TextBox tbName. J'ai également ajouté un bouton de fermeture pour le formulaire et j'ai double-cliqué dessus pour générer un squelette de gestionnaire d'événements btnClose_Click. L'ajout du mot Close () fait que cela fonctionne.

Par défaut, la propriété activée du bouton Ajouter une ligne est définie sur faux au démarrage. Nous ne voulons pas ajouter de lignes au DataGridView à moins qu'il n'y ait du texte à la fois dans la zone Name TextEdit et dans le ComboBox. J'ai créé la méthode CheckAddButton, puis j'ai généré un gestionnaire d'événements Leave pour la zone d'édition Name Text en double-cliquant à côté du mot Leave dans les propriétés lorsqu'il affichait les événements. La boîte Propriétés le montre dans l'image ci-dessus. Par défaut, la zone Propriétés affiche les propriétés, mais vous pouvez voir les gestionnaires d'événements en cliquant sur le bouton éclair.

vide privé CheckAddButton()
{
btnAddRow.Enabled = (tbName.Text.Length > 0 && cbAges.Text.Length > 0) ;
}

Vous pouvez utiliser l'événement TextChanged à la place, bien que cela appelle la méthode CheckAddButton() pour chaque pression de touche plutôt que lorsque le contrôle est laissé, c'est-à-dire lorsqu'un autre contrôle prend le focus. Sur Ages Combo, j'ai utilisé l'événement TextChanged mais j'ai sélectionné le gestionnaire d'événements tbName_Leave au lieu de double-cliquer pour créer un nouveau gestionnaire d'événements.

Tous les événements ne sont pas compatibles car certains événements fournissent des paramètres supplémentaires, mais si vous pouvez voir un gestionnaire généré précédemment, vous pouvez l'utiliser. C'est surtout une question de préférence, vous pouvez avoir un gestionnaire d'événements distinct pour chaque contrôle que vous utilisez ou partager des gestionnaires d'événements (comme je l'ai fait) lorsqu'ils ont une signature d'événement commune, c'est-à-dire que les paramètres sont les mêmes.

J'ai renommé le composant DataGridView en dGView pour plus de brièveté et j'ai double-cliqué sur AddRow pour générer un squelette de gestionnaire d'événements. Ce code ci-dessous ajoute une nouvelle ligne vide, obtient cet index de lignes (c'est RowCount-1 car il vient d'être ajouté et RowCount est basé sur 0), puis accède à cette ligne via son index et définit les valeurs dans les cellules de cette ligne pour les colonnes Votre nom et votre âge.

dGView.Rows.Add() ;
int RowIndex = dGView.RowCount - 1 ;
DataGridViewRow R= dGView.Rows[RowIndex] ;
R.Cells['VotreNom'].Value = tbName.Text ;
R.Cells['Age'].Value = cbAges.Text ;

À la page suivante : Contrôles des conteneurs

07 de 10

Utilisation de conteneurs avec des contrôles

Panneau superposé et GroupBox

Lors de la conception d'un formulaire, vous devez penser en termes de conteneurs et de contrôles et quels groupes de contrôles doivent être conservés ensemble. Dans les cultures occidentales de toute façon, les gens lisent du haut à gauche vers le bas à droite, alors facilitez la lecture de cette façon.

Un conteneur est l'un des contrôles pouvant contenir d'autres contrôles. Ceux trouvés dans la boîte à outils incluent le panneau, FlowLayoutpanel, SplitContainer, TabControl et TableLayoutPanel. Si vous ne voyez pas la boîte à outils, utilisez le menu Affichage et vous la trouverez. Les conteneurs maintiennent les contrôles ensemble et si vous déplacez ou redimensionnez le conteneur, cela affectera le positionnement des contrôles. Déplacez simplement les contrôles sur le conteneur dans le concepteur de formulaires et il reconnaîtra que le conteneur est maintenant en charge.

Panneaux et GroupBox

Un Panel est similaire à un GroupBox mais un GroupBox ne peut pas défiler mais peut afficher une légende et a une bordure par défaut. Les panneaux peuvent avoir des bordures mais pas par défaut. J'utilise les GroupBoxes parce qu'elles sont plus jolies et c'est important parce que :

  • La loi de Bolton - Les utilisateurs accorderont généralement une note plus élevée aux logiciels agréables avec des bogues qu'aux logiciels simples sans bogues !

Les panneaux sont également pratiques pour regrouper des conteneurs, vous pouvez donc avoir deux GroupBox ou plus sur un panneau.

Voici un conseil pour travailler avec des conteneurs. Déposez un Split Container sur un formulaire. Cliquez sur le panneau de gauche puis sur celui de droite. Essayez maintenant de supprimer le SplitContainer du formulaire. C'est difficile jusqu'à ce que vous fassiez un clic droit sur l'un des panneaux, puis cliquez sur Select SplitContainer1. Une fois que tout est sélectionné, vous pouvez le supprimer. Une autre façon qui s'applique à tous les contrôles et conteneurs est appuyez sur la touche Échap pour sélectionner le parent.

Les conteneurs peuvent également s'imbriquer les uns dans les autres. Faites simplement glisser un petit au-dessus d'un plus grand et vous verrez apparaître brièvement une fine ligne verticale pour montrer que l'un est maintenant à l'intérieur de l'autre. Lorsque vous faites glisser le conteneur parent, l'enfant est déplacé avec lui. L'exemple 5 le montre. Par défaut, le panneau marron clair n'est pas à l'intérieur du conteneur, donc lorsque vous cliquez sur le bouton de déplacement, le GroupBox est déplacé mais pas le panneau. Faites maintenant glisser le panneau sur le GroupBox afin qu'il soit complètement à l'intérieur du Groupbox. Lorsque vous compilez et exécutez cette fois, cliquer sur le bouton Déplacer déplace les deux ensemble.

À la page suivante : Utilisation de TableLayoutPanels

08 de 10

Utilisation de TableLayoutPanels

Utiliser un TableLayoutPanel

Un TableLayoutpanel est un conteneur intéressant. C'est une structure de table organisée comme une grille 2D de cellules où chaque cellule contient un seul contrôle. Vous ne pouvez pas avoir plus d'un contrôle dans une cellule. Vous pouvez spécifier comment le tableau s'agrandit lorsque d'autres contrôles sont ajoutés ou même s'il ne s'agrandit pas. Il semble modélisé sur un tableau HTML car les cellules peuvent s'étendre sur des colonnes ou des lignes. Même le comportement d'ancrage des contrôles enfants dans le conteneur dépend des paramètres Margin et Padding. Nous en verrons plus sur les ancres à la page suivante.

Dans l'exemple Ex6.cs, j'ai commencé avec un tableau à deux colonnes de base et spécifié via la boîte de dialogue Styles de contrôle et de ligne (sélectionnez le contrôle et cliquez sur le petit triangle pointant vers la droite situé en haut à droite pour voir une liste de tâches et cliquez sur la dernière) que la colonne de gauche représente 40 % et la colonne de droite 60 % de la largeur. Il vous permet de spécifier les largeurs de colonne en termes de pixels absolus, en pourcentage ou vous pouvez simplement le laisser AutoSize. Un moyen plus rapide d'accéder à cette boîte de dialogue consiste simplement à cliquer sur la collection à côté de Colonnes dans la fenêtre Propriétés.

J'ai ajouté un bouton AddRow et laissé la propriété GrowStyle avec sa valeur AddRows par défaut. Lorsque le tableau est plein, il ajoute une autre ligne. Vous pouvez également définir ses valeurs sur AddColumns et FixedSize afin qu'il ne puisse plus croître. Dans Ex6, lorsque vous cliquez sur le bouton Ajouter des contrôles, il appelle la méthode AddLabel() trois fois et AddCheckBox() une fois. Chaque méthode crée une instance du contrôle, puis appelle tblPanel.Controls.Add() Après l'ajout du 2e contrôle, le troisième contrôle fait grossir la table. L'image le montre après avoir cliqué une fois sur le bouton Ajouter un contrôle.

Au cas où vous vous demanderiez d'où viennent les valeurs par défaut dans les méthodes AddCheckbox() et AddLabel() que j'appelle, le contrôle a été initialement ajouté manuellement à la table dans le concepteur, puis le code pour le créer et l'initialiser a été copié de l'intérieur de cette région. Vous trouverez le code d'initialisation dans l'appel de la méthode InitializeComponent une fois que vous aurez cliqué sur le + à gauche de la région ci-dessous :

Code généré par le Concepteur de formulaires Windows

À la page suivante : Quelques propriétés communes que vous devez connaître

09 de 10

Propriétés de contrôle communes que vous devez connaître

Utiliser des ancres

Vous pouvez sélectionner plusieurs commandes en même temps en maintenant la touche Maj enfoncée lorsque vous sélectionnez la deuxième commande et les suivantes, même des commandes de types différents. La fenêtre Propriétés affiche uniquement les propriétés communes aux deux, vous pouvez donc toutes les définir sur les mêmes champs de taille, de couleur et de texte, etc. Même les mêmes gestionnaires d'événements peuvent être affectés à plusieurs contrôles.

Les ancres pèsent

Selon l'utilisation, certains formulaires finiront souvent par être redimensionnés par l'utilisateur. Rien ne semble pire que de redimensionner un formulaire et de voir les contrôles rester dans la même position. Tous les contrôles ont des ancres qui vous permettent de les 'attacher' aux 4 bords afin que le contrôle se déplace ou s'étire lorsqu'un bord attaché est déplacé. Cela conduit au comportement suivant lorsqu'un formulaire est étiré à partir du bord droit :

  1. Contrôle attaché à gauche mais pas à droite. - Il ne bouge pas et ne s'étire pas (mauvais !)
  2. Contrôle attaché aux bords gauche et droit. Il s'étire lorsque la forme est étirée.
  3. Contrôle attaché au bord droit. Il se déplace lorsque la forme est étirée.

Pour les boutons comme Fermer qui sont traditionnellement en bas à droite, le comportement 3 est ce qui est nécessaire. ListViews et DataGridViews sont les meilleurs avec 2 si le nombre de colonnes est suffisant pour déborder le formulaire et nécessite un défilement). Les ancres Haut et Gauche sont les ancres par défaut. La fenêtre de propriété comprend un petit éditeur astucieux qui ressemble au drapeau anglais. Cliquez simplement sur l'une des barres (deux horizontales et deux verticales) pour définir ou effacer l'ancre appropriée, comme indiqué dans l'image ci-dessus.

Accompagnement

Une propriété qui n'est pas beaucoup mentionnée est la propriété Tag et pourtant elle peut être incroyablement utile. Dans la fenêtre Propriétés, vous ne pouvez attribuer que du texte, mais dans votre code, vous pouvez avoir n'importe quelle valeur qui descend de Object.

J'ai utilisé Tag pour contenir un objet entier tout en n'affichant que quelques-unes de ses propriétés dans un ListView. Par exemple, vous souhaiterez peut-être uniquement afficher un nom et un numéro de client dans une liste récapitulative des clients. Mais faites un clic droit sur le client sélectionné puis ouvrez un formulaire avec tous les détails du client. C'est facile si vous créez la liste des clients en lisant tous les détails du client en mémoire et en attribuant une référence à l'objet de classe client dans la balise. Tous les contrôles ont une balise.

À la page suivante :

Comment travailler avec TabControls

10 sur 10

Travailler avec les contrôles TabTab

TabControl à deux onglets

Un TabControl est un moyen pratique d'économiser de l'espace de formulaire en ayant plusieurs onglets. Chaque onglet peut avoir une icône ou du texte et vous pouvez sélectionner n'importe quel onglet et afficher ses commandes. Le TabControl est un conteneur mais il ne contient que des TabPages. Chaque TabPage est également un conteneur auquel peuvent être ajoutés des contrôles normaux.

Dans l'exemple x7.cs, j'ai créé un panneau de page à deux onglets avec le premier onglet appelé Contrôles comportant trois boutons et une case à cocher. La deuxième page à onglet est intitulée Journaux et utilisée pour afficher toutes les actions enregistrées, notamment cliquer sur un bouton ou activer une case à cocher. Une méthode appelée Log() est appelée pour enregistrer chaque clic sur un bouton, etc. Elle ajoute la chaîne fournie à une ListBox.

J'ai également ajouté deux éléments de menus contextuels de clic droit au TabControl de la manière habituelle. Ajoutez d'abord un ContextMenuStrip au formulaire et définissez-le dans la propriété ContextStripMenu du TabControl. Les deux choix de menu sont Ajouter une nouvelle page et Supprimer cette page. Cependant, j'ai limité la suppression de la page afin que seules les pages à onglet nouvellement ajoutées puissent être supprimées et non les deux d'origine.

Ajout d'une nouvelle page d'onglet

C'est facile, créez simplement une nouvelle page d'onglet, donnez-lui une légende de texte pour l'onglet, puis ajoutez-la à la collection TabPages du TabControl Tabs

TabPage newPage = nouvelle TabPage();
newPage.Text = 'Nouvelle page';
Tabs.TabPages.Add(nouvellePage);

Dans le code ex7.cs, j'ai également créé une étiquette et l'ai ajoutée à TabPage. Le code a été obtenu en l'ajoutant dans le concepteur de formulaire pour créer le code puis en le copiant.

La suppression d'une page consiste simplement à appeler TabPages.RemoveAt(), en utilisant Tabs.SelectedIndex pour obtenir l'onglet actuellement sélectionné.

Conclusion

Dans ce didacticiel, nous avons vu comment fonctionnent certaines des commandes les plus sophistiquées et comment les utiliser. Dans le prochain didacticiel, je vais continuer avec le thème de l'interface graphique et examiner le thread de travail en arrière-plan et montrer comment l'utiliser.