Plusieurs fenêtres

cs_DjoDjo Messages postés 4 Date d'inscription samedi 26 janvier 2002 Statut Membre Dernière intervention 4 février 2010 - 4 févr. 2010 à 22:37
mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 - 5 févr. 2010 à 20:14
Bonjour à tous,

Tout d'abord je suis nouveau sur ce site, je m'excuse donc si je me suis trompé de catégorie.
Je viens faire appel à vous, car je suis actuellement en train de programmer (enfin plutot essayé) une application.
Et sur cette application, j'ai pas mal d'images à afficher (environ une trentaine) de taille 100*100 pixels, et au lieu de faire une fenêtre toute grande et moche, je voudrais faire un système de défilement, ou de pages ...
Car j'ai essayé en faisant comme un système de page avec des flèches et en jouant sur les visibilités, mais le problème c'est que je voulais faire 5 pages, mais ça devient impossible à gérer, j'aurais trop de form à paramétrer ...

Je voulais donc savoir si il n'y aurais pas une petite solution à mon problème.
Merci d'avance.

2 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
5 févr. 2010 à 08:07
Bonjour,
Rien ne t'oblige à avoir tes images sur la Form où tu veux les faire défiler.
Pour une trentaine seulement de de si petite taille, tu peux les mettre, par exemple, sur une autre Form invisible et les faire défiler dans ta Form en pointant tour à tour sur ces images-là ...


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 7
5 févr. 2010 à 20:14
Bonjour,
Si ça peut t'aider, j'ai pondu ça rapidement.

Il s'agit d'un composant pompeusement nommé ImageView chargé d'afficher des vignettes. Le composant gère automatiquement les scrollbars si les vignettes ne peuvent être toutes affichées. Don y'a pu rien à faire.

Je l'ai accompagné d'une fenêtre de démonstration.
Pour tester, il te suffit de créer une nouvelle fenêtre et de coller tout le code figurant ci-dessous en lieu et place de celui généré par défaut par VB.

Deux boutons te permettront d'ajouter ou de supprimer des images. En cliquant une des images, la sélection s'affiche en plus grand dans un picturebox de contrôle.

Bon c'est pas vraiment fini et c'est naturellement perfectible mais ça marche plutôt bien d'après les quelques tests que j'ai faits.

Voilà,
Bonne utilisation
MD

''' <summary>
''' La fenêtre d'exécution
''' </summary>
''' <remarks></remarks>
Public Class Form1

    Private WithEvents ctrImgView As ImageView
    Private WithEvents btnAjouter As Button
    Private WithEvents btnSupprimer As Button
    Private pImageBox As PictureBox

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Size = New Size(600, 480)
        'Création des contrôles 2 boutons qui serviront à manipuler le composant, et de la picturebox qui affichera l'image sélectionnée
        btnAjouter New Button With {.Text "Ajouter", .Location = New Point(350, 350)}
        btnSupprimer New Button With {.Text "Supprimer", .Location = New Point(350, 400)}
        pImageBox New PictureBox With {.Size New Size(200, 200), .Location = New Point(350, 20), .SizeMode = PictureBoxSizeMode.StretchImage}
        'Création du composant ImageView
        ctrImgView New ImageView With {.Size New Size(300, 400), .Location = New Point(20, 20)}
        'On peut changer certaines propriétés
        ctrImgView.NbreImagesParLigne = 3
        'Ajout des contrôles à la fenêtre d'exécution
        Me.Controls.Add(ctrImgView)
        Me.Controls.Add(btnAjouter)
        Me.Controls.Add(btnSupprimer)
        Me.Controls.Add(pImageBox)
    End Sub

    Private Sub btnAjouter_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAjouter.Click
        'Le bouton Ajouter permet d'ajouter des images au composant ImageView
        Dim ouvrir As New OpenFileDialog
        ouvrir.Filter = "Fichiers jpg|*.jpg|Fichiers bmp|*.bmp|Fichiers gif|*.gif|Tous les fichiers jpg|*.*"
        ouvrir.ShowDialog()
        If ouvrir.FileName <> "" Then
            'Ajout de l'image
            ctrImgView.AjouterImage(New Bitmap(ouvrir.FileName))
        End If
    End Sub

    Private Sub btnSupprimer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSupprimer.Click
        'Ici on supprime l'image sélectionnée
        If ctrImgView.IdImageSelectionnee > -1 Then
            'Suppression de l'image
            ctrImgView.SupprimerImage(ctrImgView.IdImageSelectionnee)
            'Le picturebox de la fenêtre d'exécution est vide
            pImageBox.Image = Nothing
        End If
    End Sub

    Private Sub ctrImgView_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctrImgView.SelectionChanged
        'Gestion de l'évènement SelectionChanged renvoyé par le composant ImageView
        Dim pbox As PictureBox = DirectCast(sender, PictureBox)
        'On affiche l'image sélectionnée dans le picturebox de contrôle
        pImageBox.Image = pbox.Image
    End Sub
End Class

''' <summary>
''' Le composant ImageView
''' </summary>
''' <remarks></remarks>
Public Class ImageView
    Inherits Panel

    Private pPictureBoxes As New List(Of PictureBox)
    Private pSize As New Size(100, 100)
    Private pEcart As Integer = 5
    Private pNbreImagesParLigne As Integer = 3
    Private pSelection As Integer = -1

    'Création de l'évènement SelectionChanged
    Public Event SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs)

    Public Sub New()
        Me.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
        Me.Size = New Size(400, 200)
        Me.AutoScroll = True
    End Sub

    Private Sub Reorganiser()
        'Réorganise les images dans le composant
        Dim HScrollValue As Integer = Me.HorizontalScroll.Value
        Dim VScrollValue As Integer = Me.VerticalScroll.Value
        Me.VerticalScroll.Value = 0
        Me.HorizontalScroll.Value = 0
        Dim position As New Point(pEcart, pEcart)
        Dim cmpt As Integer = 0
        For Each pbox As PictureBox In pPictureBoxes
            pbox.Location = position
            cmpt += 1
            If cmpt = pNbreImagesParLigne Then
                cmpt = 0
                position.Offset(pEcart - position.X, pSize.Height + pEcart)
            Else
                position.Offset(pSize.Width + pEcart, 0)
            End If
        Next
    End Sub

    Public Sub AjouterImage(ByVal bmp As Bitmap)
        'Ajout d'une image
        Dim pbox As New PictureBox
        pbox.Size = pSize
        pbox.SizeMode = PictureBoxSizeMode.StretchImage
        pbox.Image = bmp
        AddHandler pbox.Click, New eventhandler(AddressOf Image_Click)
        pPictureBoxes.Add(pbox)
        Me.Controls.Add(pbox)
        'Réorganiser les images
        Reorganiser()
    End Sub

    Public Sub SupprimerImage(ByVal index As Integer)
        'Suppression d'une image par son index
        If index < 0 Or index > pPictureBoxes.Count - 1 Then
            Return
        End If
        If index = pSelection Then
            pSelection = -1
        End If
        Dim pbox = pPictureBoxes(index)
        Me.Controls.Remove(pbox)
        pPictureBoxes.Remove(pbox)
        'Réorganiser les images
        Reorganiser()
    End Sub

    Public Property NbreImagesParLigne() As Integer
        'Propriété définissant le nombre d'images par ligne
        Get
            Return pNbreImagesParLigne
        End Get
        Set(ByVal value As Integer)
            pNbreImagesParLigne = value
            Reorganiser()
        End Set
    End Property

    Public Property TailleDesImages() As Size
        Get
            Return pSize
        End Get
        Set(ByVal value As Size)
            pSize = value
            Reorganiser()
        End Set
    End Property

    Public Property IdImageSelectionnee() As Integer
        'Obtient ou définit l'index de l'image sélectionnée 
        Get
            Return pSelection
        End Get
        Set(ByVal value As Integer)
            ChangerSelection(value)
        End Set
    End Property

    Public ReadOnly Property Image(ByVal index As Integer) As Bitmap
        'Renvoie le bitmap d'une image appelée par son index
        Get
            If index < 0 Or index > pPictureBoxes.Count - 1 Then
                Return Nothing
            Else
                Return pPictureBoxes(index).Image
            End If
        End Get
    End Property

    Private Sub ChangerSelection(ByVal nouvelleSelection As Integer)
        If pSelection > -1 Then
            pPictureBoxes(pSelection).BorderStyle = Windows.Forms.BorderStyle.None
        End If
        pSelection = nouvelleSelection
        pPictureBoxes(pSelection).BorderStyle = Windows.Forms.BorderStyle.FixedSingle
    End Sub

    Private Sub Image_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim pbox As PictureBox = DirectCast(sender, PictureBox)
        ChangerSelection(pPictureBoxes.IndexOf(pbox))
        RaiseEvent SelectionChanged(sender, e)
    End Sub

    Private Sub ImageView_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        Reorganiser()
    End Sub
End Class

0