IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Size Dynamique picturebox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 15
    Par défaut Size Dynamique picturebox
    Bonjour,

    Je veux créer une picturebox de façon dynamique lors d'un clique sur un bouton sur mon winform mais permettant à l'utilisateur de choisir la dimension de celle ci (width, height). Quel est la méthode à utilisée ?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Lorsqu'on créé un objet dynamiquement on doit se soucier de ce qui suit :

    Q : Comment instancier un objet dynamiquement ?
    R : Pour une PictureBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim TON_CONTROL as new pictureBox
    Q : Comment définir des dimensions à un objet qui le permet ?
    R : On lui définie ses dimensions via sa propriété "Size" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TON_CONTROL.Size = New size(48,48)
    Q : Ou sera t-il placé ?
    R : sur ton formulaire principal à des coordonnées bien précises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TON_CONTROL.location = New size(10,10)
    Q : Comment l'ajouter au form principal ?
    R : En utilisant la méthode ".add" de la propriété "Controls" de Form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.controls.add(TON_CONTROL)
    NB : Il est probable qu'il y ai plusieurs contrôles de ce même type sur ton formulaire principal alors il serait judicieux de pouvoir les identifier si tu souhaites travailler avec individuellement ! Il faudra alors utiliser la propriété ".tag" de chaque Objet que tu instancieras de la classe PictureBox ou définir des noms uniques via la propriété ".name". La mise en place d'une variable d'incrémentation (increment as integer) avec une portée de classe permettrait d'obtenir le résultat escompté !

    Bonne lecture.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 15
    Par défaut
    Merci de ta réponse, jusque là nous sommes d'accord, j'ai déjà essayé quelque chose mais qui ne fonctionne pas.

    Sur le Form principal lors d'un clic sur un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    'Création de la variable de l'étiquette
        Dim Etic As New PictureBox()
        Public Width1 As Integer
        Public Height1 As Integer
     
    'Propriétés de l'étiquette
            Dimensions.Show()
            If Dimensions.BT_VALIDER.DialogResult = Windows.Forms.DialogResult.OK Then
                Me.Etic.Location = New Drawing.Point(500, 250)
                Me.Etic.Size = New Size(Width1, Height1)
                Me.Etic.Visible = True
                Me.Etic.BackColor = Color.White
                Me.Etic.BorderStyle = BorderStyle.FixedSingle
            End If
            'Ajout du controle de l'étiquette
            Me.Controls.Add(Etic)
    Sur le Form Dimensions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Private Sub BT_VALIDER_Click(sender As System.Object, e As System.EventArgs) Handles BT_VALIDER.Click
            If Verification() Then
                Form_principal.Width1 = Me.TB_LARGEUR.Text
                Form_principal.Height1 = Me.TB_HAUTEUR.Text
                Me.Close()
            Else
                Me.LBL_ERREUR.Visible = True
            End If
        End Sub
     
        ''' <summary>
        ''' Vérifie les deux textbox de la page, regarde si elles sont remplies et si des nombres ont été entrés
        ''' </summary>
        ''' <returns>Vrai si pas d'erreur, faux si une erreur</returns>
        ''' <remarks></remarks>
        Function Verification() As Boolean
            Dim Bon As Boolean = True
            If Me.TB_LARGEUR.Text Is Nothing Or Not IsNumeric(Me.TB_LARGEUR.Text) Then
                Bon = False
            End If
            If Me.TB_HAUTEUR.Text Is Nothing Or Not IsNumeric(Me.TB_HAUTEUR.Text) Then
                Bon = False
            End If
            Return Bon
        End Function
    Comme tu peux le voir, lors du clic sur le bouton, ça m'affiche un form Dimensions où l'utilisateur peut rentrer les dimensions de la picturebox Largeur et hauteur et lors du clic sur valider si c'est bien une valeur numérique et s'il y a bien quelque chose, ces valeurs sont affectées aux variables public Width1 et Height1 créées dans mon form principal puis envoyées à la propriété Size de la picturebox. Mais ça ne fonctionne pas. Qu'est ce qui ne va pas ?

    Merci d'avance

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Je n'avais pas compris que tu laissais l'utilisateur saisir les dimensions dans un autre formulaire ! ...brefff....

    Il faut que tu te penches sur certaines notions avant de poursuivre ton codage :

    - la création d'un constructeur puis ajout d'arguments dans sa signature
    - le passage de paramètres entre formulaires

    D'autres points :

    - Pourquoi ne pas utiliser, éventuellement, une boite de dialogue en lieu et place de ton form dimensions ? (dans ton post tu dis que c'est un form !)
    - Attention, lorsque tu appelles la méthode ".Show" de ton form dimensions, l'user peut continuer à travailler sur ton form principal, à mon sens il faut que cette action d'appel soit bloquante donc préfères utiliser ".ShowDialog" !
    - Pourquoi déclarer et instancier un objet sur ton form principal si au final l'utilisateur ne valide pas l'ajout depuis ton form dimensions (objet instancié non utilisé = fuite mémoire) ??

    Concrètement il faudrait :

    - Créé une boite de dialogue "dimensions" en ajoutant un constructeur qui accepte en argument le form principal. Dans cette même boite de dialogue, tu ajoutes un champs de portée classe de type form1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Imports System.Windows.Forms
     
    Public Class PcbCreator
     
        Private frmMain As Form1
     
        Sub New(frm As Form1)
            frmMain = frm
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
        End Sub
     
        Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
            If Verification() Then
                Dim Etic As New PictureBox()
                Etic.Location = New Drawing.Point(500, 250)
                Etic.Size = New Size(CInt(TextBox1.Text), CInt(TextBox2.Text))
                Etic.Visible = True
                Etic.BackColor = Color.White
                Etic.BorderStyle = BorderStyle.FixedSingle
                frmMain.Controls.Add(Etic)
                Me.DialogResult = System.Windows.Forms.DialogResult.OK
                Me.Close()
            Else
                'On place ici une excpetion messageBox qui dit que les dimensions sont incorrectes...etc...
            End If
     
        End Sub
     
        Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
            Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
            Me.Close()
        End Sub
     
        Private Function Verification() As Boolean
         ' Ta fonction qui permet de vérifier que les dimensions sont en corrélation avec ton form principal
         ' ATTENTION : Il faut utiliser la variable frmMain pour récupérer ses dimensions en tps réel !!
     
          ' Je mets Return True pour montrer que l'exemple fonctionne !
          Return True
        End Function
     
    End Class
    - L'appel depuis le form principal :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim dlg = New PcbCreator(Me)
            dlg.ShowDialog()
        End Sub
    Je ne prétends pas que ce soit la meilleure solution car il existe d'autres alternatives mais c'est pour te donner une idée de départ...

    Dans la mesure du possible on épargne un max la surcharge du form principal de la partie fonctionnelle à proprement dit. On découpe le problème et on créé des classes.

    Bonne lecture .

    A+

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 15
    Par défaut
    Je te remercie beaucoup ça marche ! Dernière question, si je clique sur un bouton fermer je veux que la picturebox soit supprimée. Avant ça fonctionnait mais vu que la création de la picturebox est dans un autre fichier comment faire ?
    Et il y a une partie que j'ai pas compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private frmMain As Form1
     
        Sub New(frm As Form1)
            frmMain = frm
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
        End Sub
    A quoi sert cette partie ?

    En tout cas parfait Merci encore !

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par Pro_gamer80 Voir le message
    Je te remercie beaucoup ça marche ! Dernière question, si je clique sur un bouton fermer je veux que la picturebox soit supprimée. Avant ça fonctionnait mais vu que la création de la picturebox est dans un autre fichier comment faire ?
    Et il y a une partie que j'ai pas compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private frmMain As Form1
     
        Sub New(frm As Form1)
            frmMain = frm
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
        End Sub
    A quoi sert cette partie ?

    En tout cas parfait Merci encore !
    Bonjour,

    J'ai pourtant été bien clair la dessus dans un précédent post :

    Il faut que tu te penches sur certaines notions avant de poursuivre ton codage :

    - la création d'un constructeur puis ajout d'arguments dans sa signature
    - le passage de paramètres entre formulaires
    C'est l'essence même de la POO qu'il faut que tu arpentes avant de vouloir poursuivre la programmation avec ce langage Objet.

    Brefff cette partie permet de passer un argument depuis ton form principal au constructeur de ta classe "PcbCreator".... tu pourrais procéder autrement en faisant référence au form1 depuis ton form PcbCreator afin d'accéder à la propriété size mais c'est une mauvaise pratique et tu te rendras compte par la suite que cela deviendra très rapidement impossible à gérer avec les contraintes liées aux instances...... (je m'égards.....)......

    Si tu veux pouvoir supprimer l'objet que tu as créés alors tu peux ajouter une propriété CurrentPcb de type PictureBox dans ta classe "PcbCreator" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Property currentPcb As PictureBox
    Enfin lorsque l'user valide son choix d'ajouter le controle à ton form principal alors tu affectes :

    Du coup côté form principal tu accèdes à la propriété CurrentPcb comme suit :

    ensuite tu supprimes ton contrôle en utilisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Controls.Remove(TON_CONTROL)

    Mais là ça devient de la vraie bidouille car en découvrant au fur et à mesure les besoins liés à ton programme, je n'aurais finalement pas procédé de la sorte !!

    La bidouille modifiée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Public Class Form1
     
        Private dlg As PcbCreator
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            dlg = New PcbCreator(Me)
            dlg.ShowDialog()
        End Sub
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            If Not dlg Is Nothing AndAlso Not dlg.currentPcb Is Nothing Then
                Controls.Remove(dlg.currentPcb)
            End If
        End Sub
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    Imports System.Windows.Forms
     
    Public Class PcbCreator
     
        Public Property currentPcb As PictureBox
        Private frmMain As Form1
     
        Sub New(frm As Form1)
            frmMain = frm
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
        End Sub
     
        Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
            If Verification() Then
                Dim Etic As New PictureBox()
                Etic.Location = New Drawing.Point(500, 250)
                Etic.Size = New Size(CInt(TextBox1.Text), CInt(TextBox2.Text))
                Etic.Visible = True
                Etic.BackColor = Color.White
                Etic.BorderStyle = BorderStyle.FixedSingle
                frmMain.Controls.Add(Etic)
                currentPcb = Etic
                DialogResult = System.Windows.Forms.DialogResult.OK
                Close()
            Else
                'On place ici une excpetion messageBox qui dit que les dimensions sont incorrectes...etc...
            End If
     
        End Sub
     
        Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
            DialogResult = System.Windows.Forms.DialogResult.Cancel
            Close()
        End Sub
     
        Private Function Verification() As Boolean
            Return True
        End Function
     
    End Class

    Mais au risque de me répéter, j'insiste sur le fait qu'il faut faire de l'ouvrage de Mr LASSERRE Philippe ton livre de chevet.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. size dynamique d'un Media Element dans un canvas
    Par zouuc dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 23/02/2012, 08h34
  2. Réponses: 11
    Dernier message: 02/06/2007, 01h55
  3. Création dynamique de PictureBox
    Par azerty53 dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/02/2007, 10h51
  4. [VS2003][CR] Modifier PictureBox dynamiquement ?
    Par mainecoon dans le forum SDK
    Réponses: 1
    Dernier message: 06/12/2006, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo