[VB.NET] Mon projet UserForm de VBA à VB.NET
Résolu/Fermé
Orbital38
Messages postés
68
Date d'inscription
dimanche 4 janvier 2015
Statut
Membre
Dernière intervention
31 octobre 2020
-
Modifié par Orbital38 le 11/08/2015 à 19:37
Orbital38 Messages postés 68 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 31 octobre 2020 - 14 août 2015 à 11:43
Orbital38 Messages postés 68 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 31 octobre 2020 - 14 août 2015 à 11:43
A voir également:
- [VB.NET] Mon projet UserForm de VBA à VB.NET
- Vb.net download - Télécharger - Langages
- Musique projet x - Forum Musique / Radio / Clip
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- Vba dépassement de capacité ✓ - Forum Excel
- Projet x film ✓ - Forum Musique / Radio / Clip
2 réponses
Utilisateur anonyme
11 août 2015 à 20:15
11 août 2015 à 20:15
Bonjour,
un peu de lecture
https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net
https://fr.wikipedia.org/wiki/Programmation_orientée_objet
C'est une "philosophie" différente de la programmation procédural ou événementielle.
Mais ça marche très bien quand on s'y est mis.
Enfin merci de ne pas envoyer un projet entier.
On traitera point par point, poste le code ici avec la coloration syntaxique.
un peu de lecture
https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net
'il est bon de passer en programmation objet. Visiblement c'est la modealors c'est une mode qui dure, la programmation objet date des années 60!
https://fr.wikipedia.org/wiki/Programmation_orientée_objet
C'est une "philosophie" différente de la programmation procédural ou événementielle.
Mais ça marche très bien quand on s'y est mis.
Enfin merci de ne pas envoyer un projet entier.
On traitera point par point, poste le code ici avec la coloration syntaxique.
Utilisateur anonyme
12 août 2015 à 20:10
12 août 2015 à 20:10
Bonsoir,
avec un point d'arrêt dans la méthode noraj_texte_MouseMove, est ça passe par là quand tu fais un mouse over?
avec un point d'arrêt dans la méthode noraj_texte_MouseMove, est ça passe par là quand tu fais un mouse over?
On peut même optimiser un peu avec une requête Linq
Voir ici, c'est en C#, mais tu peux passer les exemples dans un traducteur en ligne.
For Each Obj As System.Windows.Forms.PictureBox In Me.Controls.OfType(Of PictureBox).Where(Function(picBox) (picBox.Name Like "Image100*")) Call Me.test_couleur_bouton1(Obj) Next Obj
Voir ici, c'est en C#, mais tu peux passer les exemples dans un traducteur en ligne.
Orbital38
Messages postés
68
Date d'inscription
dimanche 4 janvier 2015
Statut
Membre
Dernière intervention
31 octobre 2020
Modifié par Orbital38 le 13/08/2015 à 18:44
Modifié par Orbital38 le 13/08/2015 à 18:44
Merci pour tes réponses.
Alors, déjà j'ai remplacé noraj_texte par norajtexte pour oublier l'underscore. J'ai peur d'un quelconque problème syntaxique.
Ensuite merci pour les astuces avec la déclaration dans le for each et pour le where. Je ne connaissais pas. Du coup j'ai gagné pas mal de ligne dans mon code et ça devient un peu plus clair. =)
Concernant mes MouseMove, je suis passé avec 2 images et je joue sur la propriété visible des 2 images. Même sans ça, mon erreur venait d'un de mes tests :
Nouveau soucis : Si je clique sur un bouton, l'action associé se fait en boucle, même pour un simple MsgBox.
Edit : après un pas à pas, je vois que la private sub du Click se fait en boucle. Mais des fois elle s'arrête au bout d'une dizaine de répétition... Je ne comprends pas pourquoi. Ce nombre de répétition ne correspond pas non plus au nombre total de bouton que j'invoque dans ma Form.
Alors, déjà j'ai remplacé noraj_texte par norajtexte pour oublier l'underscore. J'ai peur d'un quelconque problème syntaxique.
Ensuite merci pour les astuces avec la déclaration dans le for each et pour le where. Je ne connaissais pas. Du coup j'ai gagné pas mal de ligne dans mon code et ça devient un peu plus clair. =)
Concernant mes MouseMove, je suis passé avec 2 images et je joue sur la propriété visible des 2 images. Même sans ça, mon erreur venait d'un de mes tests :
If noraj_texte.Tag Is Ctrl2.Tag ThenJ'ai remplacé ça par
If noraj_texte.Tag.ToString = Ctrl2.Tag.ToString Thenet ça marche.
Nouveau soucis : Si je clique sur un bouton, l'action associé se fait en boucle, même pour un simple MsgBox.
Private Sub noraj1_Click(sender As Object, e As EventArgs) Handles noraj1.Click If noraj1.Tag.ToString <> "" Then 'Call Outils.analyse_tag(noraj1.Tag.ToString) MsgBox("test") End If End Sub Private Sub noraj2_Click(sender As Object, e As EventArgs) Handles noraj2.Click If noraj2.Tag.ToString <> "" Then 'Call Outils.analyse_tag(noraj2.Tag.ToString) MsgBox("test") End If End Sub
Edit : après un pas à pas, je vois que la private sub du Click se fait en boucle. Mais des fois elle s'arrête au bout d'une dizaine de répétition... Je ne comprends pas pourquoi. Ce nombre de répétition ne correspond pas non plus au nombre total de bouton que j'invoque dans ma Form.
Orbital38
Messages postés
68
Date d'inscription
dimanche 4 janvier 2015
Statut
Membre
Dernière intervention
31 octobre 2020
Modifié par Orbital38 le 14/08/2015 à 09:49
Modifié par Orbital38 le 14/08/2015 à 09:49
A chaque passage je vois que sender.Name = Image10006, ce qui correspond bien au bouton cliqué. J'ai également noraj1.Name = Image10006.
J'ai fait le test sur une ancienne version car je ne suis pas chez moi. A toute les répétitions j'ai le même résultat : http://hpics.li/fd16cfb
Pour noraj.Name j'ai la même chose. A chaque répétition il détecte un click.
Edit :
Même problème avec l'évènement MouseClick et MouseUp.
J'ai fait un test avec une PictureBox classique dans mon module de Form, l'évènement Click marche très bien (logique).
J'ai passé sa propriété name à PictureBox.Name = Image10010 (pour qu'il soit comme mes boutons), et là ça ne marche plus, j'ai le MsgBox en boucle.
Je pense qu'il y a quelque chose d'incorrect entre mon module de Form Outils et ma classe Classe1.
Dans ma Form j'ai ça :
Après mon Form_Load :
Dans ma classe :
Avec juste mes évènements (MouseMove et Click) :
J'ai fait le test sur une ancienne version car je ne suis pas chez moi. A toute les répétitions j'ai le même résultat : http://hpics.li/fd16cfb
Pour noraj.Name j'ai la même chose. A chaque répétition il détecte un click.
Edit :
Même problème avec l'évènement MouseClick et MouseUp.
J'ai fait un test avec une PictureBox classique dans mon module de Form, l'évènement Click marche très bien (logique).
J'ai passé sa propriété name à PictureBox.Name = Image10010 (pour qu'il soit comme mes boutons), et là ça ne marche plus, j'ai le MsgBox en boucle.
Je pense qu'il y a quelque chose d'incorrect entre mon module de Form Outils et ma classe Classe1.
Dans ma Form j'ai ça :
Public Collect As Collection Public Collect_texte As Collection
Après mon Form_Load :
Private Sub Outils_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove Dim Ctrl As System.Windows.Forms.PictureBox Dim Ctrl_texte As System.Windows.Forms.Label Dim test3000 As Classe1 Dim test5000 As Classe1 Collect = New Collection Collect_texte = New Collection For Each Ctrl In Me.Controls.OfType(Of PictureBox) If Ctrl.Name Like "Image100*" Then test3000 = New Classe1 test3000.noraj = Ctrl Collect.Add(test3000) End If Next Ctrl For Each Ctrl_texte In Me.Controls.OfType(Of Label) If Ctrl_texte.Name Like "Label100*" Then test5000 = New Classe1 test5000.noraj_texte = Ctrl_texte Collect_texte.Add(test5000) End If Next Ctrl_texte End Sub
Dans ma classe :
Public WithEvents noraj As System.Windows.Forms.PictureBox Public WithEvents noraj_texte As System.Windows.Forms.Label
Avec juste mes évènements (MouseMove et Click) :
Private Sub noraj_Click(sender As Object, e As EventArgs) Handles noraj.Click 'Call Outils.analyse_tag(noraj.Tag.ToString) MsgBox("test") End Sub
Modifié par Orbital38 le 11/08/2015 à 20:48
Pour le truc de la mode je pense que c'était de trop. :D Je voulais insinuer par là que certaines personnes sont à la limite de te cracher dessus si on écrit en procédurale avec du VB.NET, et que si tu n'écris pas en objet et bien t'as rien compris. J'espère que c'est un peu faux, c'est tout. :p
Pour le projet entier ok je retiens mais je ne vois pas où est le problème. ^^
Bref, voici la moitié de mon module de classe qui gère les évènements de mes boutons persos (1 label + 1 image). L'autre moitié gère l'évènement Click mais on va se contenter du MouseMove pour l'instant :
Ma procédure reset :
Le truc c'est que quand je fais un mouseover d'une de mes images de bouton rien ne se passe, l'image ne change pas. Peut-être que c'est trop gourmand ou peut-être qu'il y a une fonction à faire comme un Reprint mais là c'est mon manque de vocabulaire et de connaissance VB qui parle.
Je pense aussi que je gère mal le handles (qui est nouveau pour moi).
+ le fait que je devrais effectivement ajouter 2 images pour un bouton plutôt qu'une seule et jouer avec la propriété .visible. Plus j'y pense plus je me dis que c'est une meilleure solution en tout point.
Merci =)