Supprimer rectangle

Résolu
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 - 3 mars 2019 à 23:53
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 - 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

12 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 4 mars 2019 à 05:40
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

1
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
4 mars 2019 à 08:13
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.

1
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
4 mars 2019 à 19:26
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
1
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
5 mars 2019 à 08:25
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?
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
Modifié le 5 mars 2019 à 22:00
For Each cal as Calendrier in MyCalendar


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

1
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
4 mars 2019 à 07:26
Bonjour,

J'ai une erreur sur (MyRectangle)
Impossible de convertir une valeur de type 'Microsoft.VisualBasic.PowerPacks.RectangleShape' en 'System.Windows.Forms.control'.
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
4 mars 2019 à 10:05
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
4 mars 2019 à 13:08
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 ????
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
4 mars 2019 à 22:15
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.
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
5 mars 2019 à 21:05
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 ????
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
6 mars 2019 à 00:24
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
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 mars 2019 à 07:46
Bien
0
Rejoignez-nous