Fermer

avril 6, 2021

Une image qui vaut mille mots: découvrez WinForms PictureBox3 minutes de lecture



La première version Telerik UI pour WinForms pour 2021 a apporté à nos clients un tout nouveau thème Office2019Light Toast notifications RadPictureBox Thème Metro avec images vectorielles et prise en charge de Visual Studio au moment du design dans .NET Core / .NET 5.0 . Dans ce blog, nous examinerons plus en détail RadPictureBox, ses fonctionnalités et même une démo entièrement fonctionnelle.

Décrivons d'abord ce qu'est une RadPictureBox. Semblable aux images encadrées que nous accrochons à nos murs, une commande de boîte à images nous permet de «suspendre» des images dans nos applications. En effet, RadPictureBox est conçu pour afficher des images et interagir avec elles. Le contrôle prend en charge les formats d'image raster bien connus tels que PNG, JPG, BMP, ICO, etc. Afin d'étendre la prise en charge des images vectorielles que nous avons introduites dans R2 2020 nous avons fourni la prise en charge des SVG (graphiques vectoriels évolutifs) dans RadPictureBox.

Caractéristiques

Les principales fonctionnalités du tout nouveau contrôle RadPictureBox sont :

Panneaux

Les panneaux, ou barres d'outils, fournissent un moyen facile d'ajouter de nouvelles fonctionnalités au contrôle RadPictureBox. Les barres d'outils sont positionnées sur les quatre côtés de la commande – en haut, en bas, à gauche et à droite.

 Une image de visage souriant avec des yeux en forme de cœur comporte des panneaux sur les quatre côtés. Sur le dessus se trouve une icône de ciseaux pour couper; à gauche, une icône de sauvegarde du disque; à droite, une icône avec deux morceaux de papier pour la copie; et en bas se trouve une icône de presse-papiers pour coller.

Modes de panneau

Les panneaux peuvent être affichés dans trois modes différents:

  • Toujours – Les panneaux seront visibles à tout moment.
  • OnMouseHover – Les panneaux ne sont affichés que lorsque la souris se trouve sur le contrôle de la zone d'image.
  • Aucun – Les panneaux ne sont pas visibles et vous devez les afficher par programme.

Ces modes sont contrôlés par le PanelDisplayMode du contrôle.

Priorité horizontale ou verticale

RadPictureBox peut organiser avec priorité le panneau horizontal ou vertical, qui est contrôlé avec la propriété PanelOverflowMode.

La différence entre les deux modes est illustrée dans la capture d'écran ci-dessous:

 PanelOverflowMode vous permet de définir si la barre horizontale vient en premier ou la barre verticale. En horizontal sur vertical, les icônes de la barre verticale et la barre elle-même s'affichent sous la hauteur de la barre horizontale. Et vice versa pour vertical-sur-horizontal.

Collections d'objets

Le panneau supérieur a Left, Center et RightItems, qui vous permettent d'ajouter directement des éléments dans chaque coin ou au centre du panneau, sans besoin d'écrire des mises en page personnalisées.

De plus, chacune des collections d'éléments est hébergée par une pile d'éléments, qui est un élément visuel responsable de la mise en page des éléments et fournit différentes options de personnalisation telles que la définition des couleurs et des bordures d'arrière-plan et contrôle de la distance entre les éléments.

this .radPictureBox1.TopPanel.CenterElementsStack.ElementSpacing = 3;

this .radPictureBox1.TopPanel.BackColor = Color.FromArg (100, Color.DarkBlue);

this .radPictureBox1.TopPanel.BorderColor = Color.FromArgb (100, Color.DarkBlue);

 Trois boîtes photo différentes: ElementSpacing = 1 a un panneau avec un arrière-plan gris et les icônes sont 1 pixel séparé; ElementSpacing = 3 a un panneau avec un arrière-plan violet et les icônes sont distantes de 3 pixels; ElementSpacing = 5 panneau a un fond rouge et 5 pixels entre les icônes.

Démo

Après avoir discuté à travers le contrôle et ses panneaux, nous allons créer une démo ensemble en utilisant RadPictureBox. 😋 Le but est de créer une application qui parcourt les images dans un certain répertoire.

Commençons par créer un nouveau formulaire Windows. Faites glisser un contrôle RadPictureBox de la boîte à outils et ancrez-le pour le remplir. Nous n'utiliserons plus le concepteur, nous pouvons donc le fermer.

Pour naviguer dans les images du répertoire, nous ajouterons deux boutons à gauche et à droite. Et voici à quoi ressemble le constructeur de notre formulaire:

public RadForm1 ()

{

this [19659024] .InitializeComponent ();

RadButtonElement previousButton = nouveau RadButtonElement ();

previousButton.ToolTipText = "Image précédente" ;

previousButton.Text = [19659047] " ue016" ;

previousButton.CustomFont = "TelerikWebUI" ; [19659004] previousButton.CustomFontSize = 16;

previousButton.Click + = this .PreviousButton_Click; [19659004] this .radPictureBox1.LeftPanel.CenterItems.Add (previousButton);

RadButtonElement nextButton = nouveau RadButtonElement ();

nextButton.ToolTipText = "Image suivante" ;

nextButton.Text = " ue014" ;

nextButton.CustomFont = "TelerikWebUI" ;

nextButton.CustomFontSize = 16;

nextButton.Click + = this .NextButton_Click; [19659004] this .radPictureBox1.RightPanel.CenterItems.Add (nextButton);

}

Voici comment ressemble:

 RadPictureBox Gallery n'a pas d'image age et affiche les flèches gauche et droite du curseur de la galerie.

L'arrière-plan du panneau occupe tout le contrôle de haut en bas. Nous pouvons le supprimer en définissant DrawFill et DrawBorder des panneaux gauche et droit sur false.

this .radPictureBox1.LeftPanel.DrawFill = false ];

this .radPictureBox1.LeftPanel.DrawBorder = false ;

this . radPictureBox1.RightPanel.DrawFill = false ;

this .radPictureBox1.RightPanel.DrawBorder = false ;

Voici le résultat 👏:

Mais nous devons maintenant mettre en évidence ces boutons d'une manière ou d'une autre, afin qu'ils soient clairement visibles sur un fond gris. peut être obtenu en définissant le remplissage, l'arrière-plan et la bordure sur CenterElementsStack des panneaux gauche et droit.

this .radPictureBox1.LeftPanel.CenterEleme ntsStack.Padding = nouveau Padding (3);

this .radPictureBox1.LeftPanel.CenterElementsStack.DrawFill = true ;

ceci .radPictureBox1.LeftPanel.CenterElementsStack.DrawBorder = true ;

this .radPictureBox1 .LeftPanel.CenterElementsStack.BackColor = Color.FromArgb (175, Color.DarkSlateBlue);

this .radPictureBox1.LeftPanel.CenterElementsStack.BorderCrolor = Color.FromElementsStack.BorderColor = Color.FromElementsStack.BorderColor .DarkSlateBlue);

this .radPictureBox1.RightPanel.CenterElementsStack.Padding = nouveau Padding (3);

this .radPictureBox1.RightPanel.CenterElementsStack.DrawFill = true ;

this .radPict ureBox1.RightPanel.CenterElementsStack.DrawBorder = true ;

this .radPictureBox1.RightPanel.CenterElementsStack.BackColor = Color.FromArueBlate.Delate.BackColor = Color.FromAruegbate );

this .radPictureBox1.RightPanel.CenterElementsStack.BorderColor = Color.FromArgb (175, Color.DarkSlateBlue);

Les boutons sont désormais très clairement visibles. 😄

❗❗ Il est important de noter que si nous voulons avoir des boutons solides placés sur un panneau semi-transparent, nous devons utiliser transparence dans le dos et la couleur de la bordure. Si nous définissons la propriété Opacity du panneau, cela rendra nos boutons semi-transparents également.

Les panneaux sont affichés par défaut lorsque la souris passe au-dessus du contrôle . Ils sont affichés avec une animation, en animant la propriété Opacity (animation de fondu). Nous pouvons personnaliser l'animation et animer une autre propriété. Notre objectif est de transformer l'animation de fondu en diapositive. Pour ce faire, nous définit la DisplayProperty qui est modifiée lorsque le panneau est affiché ou masqué de Opacity à PositionOffset .

this .radPictureBox1.LeftPanel.DisplayProperty = RadElement.PositionOffsetProperty;

this [1 9659024] .radPictureBox1.RightPanel.DisplayProperty = RadElement.PositionOffsetProperty;

En plus de cela, chaque panneau fournit deux propriétés, VisibleValue et HiddenValue qui sont respectivement 1 . et 0 lorsque nous utilisons la propriété Opacity . Nous devons changer leurs valeurs en une valeur valide pour la propriété PositionOffset .

// Réinitialiser l'opacité à sa valeur visible

this . radPictureBox1.LeftPanel.Opacity = 1;

this .radPictureBox1.RightPanel.Opacity = 1;

// Chargez l'arborescence des éléments, afin que nous puissions avoir des limites valides des panneaux

this .radPictureBox1.LoadElementTree ();

this .radPictureBox1.LeftPanel.VisibleValue = nouveau SizeF (0, 0);

this .radPictureBox1.LeftPanel.HiddenValue = new SizeF (- this .radPictureBox1.LeftPanel.Bounds.Width, 0 );

this .radPictureBox1.RightPanel.VisibleValue = new SizeF (0, 0);

this .radPictureBox1.RightPanel.HiddenValue = new SizeF ( this .radPictureBox1.RightPanel.Bounds.Width, 0);

Belle animation de diapositives pour les boutons de navigation. 😇

 En survol, les boutons fléchés gauche et droit glissent en position

Jusqu'à présent, nous avons ajouté quelques boutons à notre commande de boîte d'image et personnalisé les panneaux. Maintenant, ajoutons les chemins de toutes les images situées dans le dossier «Images» de notre projet, stockons-les dans une collection et affichons la première image dans le champ RadPictureBox:

// Enregistrer tous les chemins d'images dans une liste

private List < string > chemins;

// Stocke l'index de l'image sélectionnée, nous l'utiliserons lors de la navigation avec boutons

private int selectedImageIndex;

public RadForm1 ()

{

// ... code précédent

this .selectedImageIndex = 0;

this .paths = Directory.EnumerateFiles (@ ) ".. .. Images" ). ToList ();

this .radPictureBox1.Image = Image.FromFile ( this .paths [ this .selectedImageIndex] );

}

La dernière étape consiste à rendre les boutons précédent et suivant pleinement fonctionnels:

private void PreviousButton_Click ( ] objet expéditeur, EventArgs e)

{

this .selectedImageIndex -;

if ( this .selectedImageIndex <0)

{

this .selectedImageIndex = this .paths.Count - 1;

}

this .radPictureBox1.Image = Image.FromFile ( this .paths [ this .selectedImageIndex]);

}

private void NextButton_Click ( object expéditeur, EventArgs e)

{

this .selectedImageIndex ++;

if ( this .selectedImageIndex> = this .paths.Count)

{

this .selectedImageIndex = 0;

}

thi s .radPictureBox1.Image = Image.FromFile ( this .paths [ this .selectedImageIndex]);

}

Et le résultat 😍:

Partagez vos commentaires

N'hésitez pas à nous laisser un commentaire ci-dessous pour partager vos impressions. Nous aimerions savoir comment tout cela fonctionne pour vous. 😊 Vous pouvez visiter notre UI pour le portail de commentaires Winforms et nous faire savoir si vous avez des suggestions pour des fonctionnalités / contrôles particuliers.

Si vous n'avez pas essayé l'interface utilisateur Telerik pour WinForms, vous devriez consultez notre essai gratuit ou, mieux encore, parcourez toutes nos suites d'interface utilisateur dans le bundle DevCraft !




Source link

0 Partages