Supprimer rectangle [Résolu]

Messages postés
488
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
- - Dernière réponse : Whismeril
Messages postés
13650
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 août 2019
- 6 mars 2019 à 07:46
Bonjour à tous,

je fais afficher un RectangleShape pour entourer une période, et je souhaite le supprimer pour entourer une autre période.


voici mon code1 avec message d'erreur:
Impossible d'effectuer un cast d'un objet de type 'System.Windows.Forms.Label' en type 'Microsoft.VisualBasic.PowerPacks.RectangleShape'.

    Dim c As RectangleShape

        For Each c In Me.Controls
             c.Hide()
    Next


autre code2 avec erreur :
L'expressionde type 'System.windows.Forms.control' ne peut jamais être de type 'Microsoft.VisualBasic.PowerPacks.RectangleShape'.
 Dim c As Control

        For Each c In Me.Controls
            If TypeOf c Is RectangleShape Then
                c.Hide()
            End If
        Next


voici comment je fais afficher mon rectangle.
Dim canvas As New ShapeContainer
        Dim MyRectangle As New RectangleShape
        
        canvas.Parent = Me
        MyRectangle.Parent = canvas

        MyRectangle.BorderColor = System.Drawing.Color.Red
        MyRectangle.BorderWidth = 1
        MyRectangle.Location = New System.Drawing.Point(24, RecupPostionLabel(Objet_Label))
        MyRectangle.Size = New System.Drawing.Size(127, 20)


Merci pour l'aide
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
1911
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 août 2019
65
1
Merci
bonjour
si ton contrôle s'appelle MyRectangle tout simplement faire
Me.Controls.Remove(MyRectangle)
Me.Refresh()

Uniquement si tu n'as qu'un seul contrôle à supprimer
Sinon voir ici : https://codes-sources.commentcamarche.net/source/100897-supprimer-sur-une-form-des-controles-crees-dynamiquement

Attention
Hide
cache un contrôle mais ne le supprime pas

Penses à fermer cette discussion : https://codes-sources.commentcamarche.net/forum/affich-10094823-toolstripmenuitem
Utilises la roue dentée "Options" en haut à droite du message d'origine

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vb95
Messages postés
13650
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 août 2019
298
1
Merci
Bonjour

Quand tu lis ce message d'erreur
L'expressionde type 'System.windows.Forms.control' ne peut jamais être de type 'Microsoft.VisualBasic.PowerPacks.RectangleShape'.
comprends tu qu'un Rectangle de dérive pas de Control?
D'ailleurs au moment ou tu le crées, tu te sers de System.Drawing, et pas de System.Windows.Forms.

Forcément tu ne peux pas le traiter comme tel.

Je pense que la solution consiste à redessiner ton canvas vierge.

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Whismeril
Messages postés
1911
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 août 2019
65
1
Merci
bonjour !
J'ai testé ceci avec 2 boutons ( un affiche le rectangle et l'autre l'efface)
Imports Microsoft.VisualBasic.PowerPacks

Public Class Form1

    Dim Canvas As New ShapeContainer
    Dim Rect1 As New RectangleShape

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Canvas.Parent = Me
        Rect1.Parent = Canvas
        Rect1.Size = New System.Drawing.Size(140, 140)
        Rect1.Location = New System.Drawing.Point(200, 200)
        Rect1.BackStyle = BackStyle.Opaque
        Rect1.BackColor = Color.White

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Canvas.Shapes.Clear() ' supprime tous les rectangles dans le Canvas

    End Sub

End Class


a voir si cela peut solutionner ton problème

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vb95
Messages postés
13650
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 août 2019
298
1
Merci
Je ne comprends pas cette phrase
Je fini par avoir un rectangle sur chaque calendrier des mois différent.

Ça me parrait évident que d’un moi à l’autre ce soit différent, mais selon ta phrase on dirait que ça te pose problème.
Peux tu être plus explicite sur la finalité de la chose?

D’autre part il existe un contrôle qui permet d’afficher des dates et sélectionner des périodes, pourquoi ne pas t’en servir?

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Whismeril
Messages postés
13650
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 août 2019
298
1
Merci
For Each cal as Calendrier in MyCalendar


Mais je continue à penser qu'un DateTimePicker répondrait à ton besoin

Quand j'étais petit, la mer Morte n'était que malade.
George Burns

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Whismeril
Messages postés
488
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
3
0
Merci
Bonjour,

J'ai une erreur sur (MyRectangle)
Impossible de convertir une valeur de type 'Microsoft.VisualBasic.PowerPacks.RectangleShape' en 'System.Windows.Forms.control'.
Commenter la réponse de ManuAntibes
Messages postés
488
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
3
Commenter la réponse de ManuAntibes
Messages postés
488
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
3
0
Merci
En fouillant à droite et a gauche plus vos conseils, j'ai codé cela qui fonctionne sur 1 mini calendrier.


 For Each c As Control In Me.Controls
            If TypeOf c Is Label Then
            Else
                For Each RS As RectangleShape In mySC.Shapes
                    Me.Controls.Remove(mySC)
                Next
            End If
        Next

        mySC = New ShapeContainer
        myRS = New RectangleShape

        mySC.Parent = Me
        myRS.Parent = mySC

        myRS.BorderColor = System.Drawing.Color.Red
        myRS.BorderWidth = 1
        myRS.Location = New System.Drawing.Point(24, RecupPostionLabel1(objLabel))
        myRS.Size = New System.Drawing.Size(127, 20)


pour faire mon mini calendrier , j'utiliser un userForm.
comment faire ma boucle sur tous les minis calendriers ?
il faut que je change "Me.Controls", mais je ne vois pas quo mettre à la place!!! le non de ma class ????
Commenter la réponse de ManuAntibes
Messages postés
488
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
3
0
Merci
Non,c est pas bon, c est pas si simple.

J' affiche des userform (petits calendrier) dans un flowlayoutpanel.

Dans mon message 5. J' ai bien avancer.
Lorsque je clic sur le calendrier de mars j' efface bien les rectangles de mars. Ça sa marche.
Par contre si je clic sur février le rectangle de mars ne s efface pas .
Je fini par avoir un rectangle sur chaque calendrier des mois différent.
Commenter la réponse de ManuAntibes
Messages postés
488
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
3
0
Merci
J'ai fait une capture d'écran



pour expliquer :Je ne comprends pas cette phrase …

Le rectangle rouge sert a visualiser la période du planning en bas.
à l'ouverture on est bien sur la première semaine du mois de Mars,
sauf que lorsque je change de mois en février, le rectangle du mois de mars doit disparaitre.

Revoir le post 5, dans mon code, je fais une boucle For each sur 'me.controls', sur le contrôle user (Calendar) que je clic.
Comment faire pour remplacer 'me.controls' par une boucle sur tous les controles user (Calendar).

voici le code pour charger et afficher des users Calendar.

 Private MyCalendar As New List(Of Calendrier)

 Sub Charger_MyCalendar()
 Dim Mon_Calendrier As New Calendrier
                Me.FlowLayoutPanel1.Controls.Add(Mon_Calendrier)
                Mon_Calendrier.Label_Mois.Text = DateCours.ToString("Y")
End Sub


Comment faire un for each sur tous les calendriers ????
Commenter la réponse de ManuAntibes
Messages postés
488
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
3
0
Merci
J'ai trouvé.

dans ma class Userform
    Private _mySC As ShapeContainer
    Public Property mySC As ShapeContainer
        Get
            Return _mySC
        End Get
        Set(value As ShapeContainer)
            _mySC = value
        End Set
    End Property

    Public _myRS As RectangleShape
    Public Property myRS As RectangleShape
        Get
            Return _myRS
        End Get
        Set(value As RectangleShape)
            _myRS = value
        End Set
    End Property

    Public Sub AfficheRectangle(ByVal Objet_Label As Label)

        mySC = New ShapeContainer
        myRS = New RectangleShape

        mySC.Parent = Me
        myRS.Parent = mySC

        myRS.BorderColor = System.Drawing.Color.Red
        myRS.BorderWidth = 1
        myRS.Location = New System.Drawing.Point(24, RecupPostionLabel1(Objet_Label))
        myRS.Size = New System.Drawing.Size(127, 20)
    End Sub



dans ma form1,


        For Each cal As Calendrier In MyCalendar
            Try
                cal.mySC.Shapes.Clear()
            Catch ex As Exception

            End Try

        Next
Commenter la réponse de ManuAntibes
Messages postés
13650
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 août 2019
298
0
Merci
Bien
Commenter la réponse de Whismeril