Sender.dispose

Fermé
Partouchefrancis Messages postés 104 Date d'inscription mercredi 2 septembre 2020 Statut Membre Dernière intervention 11 novembre 2024 - Modifié le 18 sept. 2020 à 08:58
 Utilisateur anonyme - 19 sept. 2020 à 14:19
Bonjour,

dans ce code pouvez vous me dire ce que signifie :sender.dispose
  Public decalx, decaly As Integer

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.AllowDrop = True
    End Sub

    Private Sub Lapin_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Lapin.MouseDown
        If CheckBox3.Checked = True Then
            sender.dispose()
            Dim n As Integer = 0
            Dim truc As Control
            For Each truc In Controls
                If TypeOf truc Is PictureBox Then
                    n = n + 1
                End If
            Next truc
            If n = 0 Then
                n = MsgBox("Tous les lapins sont trucidés", MsgBoxStyle.Critical, "Mission accomplie")
                End
            End If
        ElseIf CheckBox2.Checked = False Then
            decalx = e.X
            decaly = e.Y
            Lapin.DoDragDrop(Lapin.Image, DragDropEffects.All)
        End If
    End Sub

    Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter
        If CheckBox1.Checked = True Then
            e.Effect = DragDropEffects.Copy
        Else
            e.Effect = DragDropEffects.Move
        End If
    End Sub

    Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop
        If CheckBox1.Checked = True Then
            Dim toto As New PictureBox
            toto.Width = 32
            toto.Height = 32
            toto.Image = e.Data.GetData(DataFormats.Bitmap)
            Controls.Add(toto)
            toto.Left = e.X - Me.Left - decalx
            toto.Top = e.Y - Me.Top - decaly - 30
            AddHandler toto.MouseDown, AddressOf Lapin_MouseDown
        Else
            Lapin.Left = e.X - Me.Left - decalx - 3
            Lapin.Top = e.Y - Me.Top - decaly - 30
        End If
    End Sub

    Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
        If CheckBox3.Checked = True Then
            Me.Cursor = Cursors.Cross
            CheckBox1.Checked = False
            CheckBox2.Checked = False
        Else
            Me.Cursor = Cursors.Arrow
        End If
    End Sub

    Private Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
        If CheckBox3.Checked = True Then
            CheckBox1.Checked = False
        End If
    End Sub

    Private Sub CheckBox2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
        If CheckBox3.Checked = True Then
            CheckBox2.Checked = False
        End If
    End Sub

    Private Sub Lapin_Click(sender As System.Object, e As System.EventArgs) Handles Lapin.Click

    End Sub
End Class

10 réponses

NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
17 sept. 2020 à 18:26
Dispose sert à libérer les ressources de l'objet (utile si l'objet gère des informations hors gestion du GC ou si il y a risque de fuite de mémoire).
0
Partouchefrancis Messages postés 104 Date d'inscription mercredi 2 septembre 2020 Statut Membre Dernière intervention 11 novembre 2024
17 sept. 2020 à 18:38
Peux tu expliquer
Dans le cas présent
Si j’enlève cette ligne
sender.dispose

et que j’exécute En cochant checkbox3 la souris prend l’aspect d’une croix et je ne peux pas effacer l’image du lapin
Peux tu me dire concrètement ce que fait
sender.dispose 

Dans ce cas et le sender correspond à mousedown ou à. Checkbox3.checked
Désolé je suis débutant
0
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
17 sept. 2020 à 19:56
Cela force la libération du controle/objet "Lapin".
Je n'en sais pas plus.
0
Utilisateur anonyme
18 sept. 2020 à 08:48
Bonjour

Dim monLapin as New Lapin()
instancie un lapin.
De base ça crée un espace memoire et une référence vers cet espace qui sont managé, c’est à dire gérer par le garbage collector (quand ça sert plus et que le programme commence à utiliser un peu trop de ram et que le GC a envie => il libère la mémoire).

Cependant, le New ou d’autres actions peuvent créer des choses hors de portée du GC (des threads sans fin, utilisation de variables non managée etc..) Dans ce cas, le codeur de l’objet Lapin doit rendre cette classe Disposable et gérer lui même la « fin de vie » de son objet.

L’utilisateur doit disposer le lapin en fin de vie sinon tout ce qui n’est pas géré posera un problème à un moment où un autre.



D’autre part, ton code est largement perfectible
Par exemple
            For Each truc In Controls
                If TypeOf truc Is PictureBox Then
                    n = n + 1
                End If
            Next truc

Ça s’écrit
n = Controls.OffType(of PictureBox).Count()


0
Partouchefrancis Messages postés 104 Date d'inscription mercredi 2 septembre 2020 Statut Membre Dernière intervention 11 novembre 2024
18 sept. 2020 à 11:39
Merci de ta reponse
Pourquoi la mémoIre serait elle saturée puisqu'on commence à peine l’exécution du programme
Pourquoi cela ne marche t il pas si on enlève cette ligne puisque apparemment c’est une ligne qui est facultative
0

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

Posez votre question
Utilisateur anonyme
19 sept. 2020 à 09:11
J’ai du mal m’exprimer.
Un peu trop de RAM c’est quand tes variables utiles prennent 5Mo et tes variables obsolètes en prennent (complètement au pif) 500ko. On est loin de la saturation, c’est juste un peu trop.

Dans le diagramme d’utilisation de la RAM de Visual Studio, on voit les interventions du GC par des traits jaunes.

Sur un de mes projets de gros traitement de données qui utilise allègrement 3 ou 4 Go de RAM, le GC commence à travailler avant que j’ai ouvert le premier fichier, à ce moment il n’y a que quelques dizaines de Mo utilisé mais il y a déjà suffisamment de variables obsolètes pour faire le ménage.


puisque apparemment c’est une ligne qui est facultative

Elle est tout sauf facultative. Tout ce que ne peut pas géré le GC ou ce qui ne s’arrête pas dès que l’objet n’est plus utilisé doit être stoppé/géré quelque part.
On implémente alors IDisposable, et on écrit le code qui va bien pour libérer l’objet correctement dans cette méthode.
Quand l’utilisateur tombe sur un objet IDisposable, il doit lancer Dipose() à la fin de vie de l’objet pour éviter tout risque par la suite.
Supposons que tu instancies 1000 objets qui font tourner 10 threads infinis chacun. Si tu ne disposes pas, quand tu arrêtes ton logiciel, ces 10 000 tournent toujours et plus rien ne peut les arrêter.

Dans ton cas le codeur de Lapin semble même avoir fait en sorte de rendre visible le fait qu’il n’a pas été disposé.....
0
Partouchefrancis Messages postés 104 Date d'inscription mercredi 2 septembre 2020 Statut Membre Dernière intervention 11 novembre 2024
19 sept. 2020 à 10:33
Ce code correspondait à un exercice sur le drag and drop
Si on ne met pas le sender.dispose,le prog ne fonctionne pas
Pour un débutant qui apprend , comment peut il deviner qu’il faut mettre un dispose
Là est la question
0
Utilisateur anonyme
19 sept. 2020 à 11:00
D'où l'alerte visuelle je dirais.

Peux tu mettre le lien vers cet exercice ?
0
Partouchefrancis Messages postés 104 Date d'inscription mercredi 2 septembre 2020 Statut Membre Dernière intervention 11 novembre 2024
19 sept. 2020 à 11:09
http://pise.info/vb-net/08.htm
Chapitre 3.2.2
Exercice lapins
0
Utilisateur anonyme
19 sept. 2020 à 13:53
Ok

je ne connaissais pas ce site.
Dans le préambule, il est écrit
Ce n'est pas un véritable cours en ligne, même si cela s'en rapproche dangereusement. Il se peut très bien que pour une autoformation, les explications soient par moments un peu courtes, voire franchement insuffisantes. Car encore une fois, ce site est avant tout un support pour des démonstrations et des exercices effectués en direct live (et sans filet).


J'ai survolé les différents chapitres jusqu'au point où tu en es et effectivement ça manque d'explications. Mais surtout il a pris un parti séduisant pour l'autodidacte mais "dangereux".

Il attaque directement en winform, il faut donc appréhender en même temps toutes les notions de l'objet et la gestion de l'interface.
Beaucoup de cours commence en mode console, la gestion de l'interface se limite à peu près à j'écris du texte, l'utilisateur répond, donc j'écris du texte etc...
Il n'y a pas besoin de boutons ou de picturebox pour apprendre à répondre à un évènement ni à en créer un.
Une fois toutes ces notions acquises, ces cours s'attaquent à l'IHM fenêtrée.
Malgré cela, il arrive, surtout au début que ces cours soient obligés de faire écrire un code à l'apprenant sans lui expliquer pourquoi, car il n'est pas encore "prêt".
Quand on attaque directement par l'IHM fenêtrée, il y a beaucoup de chose pour lesquelles on est pas prêt (et je te parle d'expérience, j'ai perdu un an à bidouiller, avant de ravaler ma fierté et commencer par le début).

L'autre point qui me chagrine c'est qu'il n'y a pas d'énoncer à ces exercices, en tout cas je n'en ai pas trouvé, même pas pour le premier.

Je suppose donc qu'il faut arriver au même résultat que l'exe et ensuite regarder comment l'auteur a codé sa correction.

Effectivement, dans ce cas il est peu probable de trouver par soit même, à ce niveau de cours, qu'il faut disposer l'objet.

Peut-être qu'un autre cours serait plus propice à ta formation.

Celui-ci est très accessible surtout si tu viens de VB6 ou VBA, mais il ne prend pas la mesure de l'objet dans .Net, alors que c'en est l'essence https://plasserre.developpez.com/cours/vb-net/

Celui d'openclassroom, moins accessible mais centré sur l'objet (à un moment il y avait quelques erreurs, j'espère qu'ils les ont corrigées)

Enfin, de nouveau sur developpez, le cours de Tahé, que je ne connais pas, mais son cours sur C# (langage "d'origine" de .Net) est tout simplement excellent.
0
Partouchefrancis Messages postés 104 Date d'inscription mercredi 2 septembre 2020 Statut Membre Dernière intervention 11 novembre 2024
19 sept. 2020 à 14:11
Rendons hommage à ch.darmangeat
Il a fait avant le cours sur vb.net tout un cours sur l’algorytthme que j’ai fait

http://pise.info/algo/introduction.htm

Mais pour l’un comme pour l’autre je fais les mêmes critiques que toi avec à chaque fois quand on ne trouve pas le bon code et qu’on n’arrive pas à faire l’exercice un sentiment d’échec très décourageant et le sentiment d’être le dernier des c...
Apparemment le cours de Tahé serait mieux
Où le trouver?
L’exercice des lapins illustre bien ce que tu dis
Comment aurais,je eu l’idée de mettre ce sender.dispose ne sachant même pas que cela existait
Cordialement
0