Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : withEvents [ Divers / General ] (lispo)

jeudi 6 juillet 2006 à 19:37:28 | withEvents

lispo

Bonjour a tous,
J 'ai crée une classe cercle(Vba AutoCad)
mais je voudrais lui attribuer un evenement(ex: apparition d'un msgbox)
voila comment j'ai fait ma classe

''' Dans mon module Class
Public Event RayonChanger()

Private C_Rayon As Double
Private C_Air As Double
Private C_Centre As Variant
Public Objcercle As AcadCircle
Private Sub Class_Initialize()
    C_Rayon = 1
End Sub

Public Property Let Rayon(Valeur As Double)
    C_Rayon = Valeur
    RaiseEvent RayonChanger
End Property

Public Property Get Rayon() As Double
   Rayon = C_Rayon
End Property

Public Property Let Centre(Valeur As Variant)
    C_Centre = Valeur
End Property

Public Property Get Centre() As Variant
   Centre = C_Centre
End Property

Public Property Get Air() As Double
    Air = 2 * 3.14159265358979 * C_Rayon
End Property

Public Property Get Circonference() As Double
    Circonference = 3.14159265358979 * (C_Rayon * 2)
End Property

Public Property Get Pos_Centre() As Variant
Pos_Centre = Centre(0) & " / " & Centre(1) & " / " & Centre(2)
End Property

Public Property Get Diametre() As Double
Diametre = 2 * C_Rayon
End Property

Function Draw_Cercle() As Object
Set Objcercle = ThisDrawing.ModelSpace.AddCircle(Centre, Rayon)
Objcercle.Update
End Function
Private Sub cercle1_RayonChanger()
MsgBox "Rayon a changer " & Rayon
End Sub

'Dans un module normale

Private Sub Button1_Click()
Dim cercle1 As New cercle
Me.Hide
With ThisDrawing.Utility
cercle1.Centre = .GetPoint(, " Centre !")
cercle1.Rayon = 50
End With
cercle1.Draw_Cercl
End Sub

-------------------
--------------------

'' Puis j'ai rajouter tout ce qui est en bleu pour mon evenement
mais quand je change de Rayon rien n'apparait.
Si quelqu'un pourrais m'aider ca serais kool
Merci d'avance


jeudi 6 juillet 2006 à 19:47:41 | Re : withEvents

jack

Administrateur CodeS-SourceS
Salut
En supopoisant que ta classe s'appelle clsCercle (évite les noms qui pourraient ressembler à des mots clé) :
Dans ton module, il faut créer une instance de cette classe au niveau de la déclaration, pas dans une procédure.
De plus, comme ta classe génère des Events, il faut le spécifier dans la déclaration :
Private WithEvents Cercle1 As ClsCercle

Pour info, un Event peut envoyer aussi des paramètres :
Public Event RayonChanger(ByVal Valeur As Double)
Et dans l'évènement Private Sub cercle1_RayonChanger(ByVal Valeur As Double)
tu pourras utiliser directement la valeur fournie par le RaiseEvent RayonChanger(C_Rayon) dans ton
MsgBox "Rayon a changer " & CStr(Valeur)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro

jeudi 6 juillet 2006 à 20:10:55 | Re : withEvents

lispo

Re-Bonjour,
Désoler je n'ais pas tout a fait saisie ce que tu écris

qui va dans le module de class et qui va dans ma Form

vendredi 7 juillet 2006 à 03:15:15 | Re : withEvents

jack

Administrateur CodeS-SourceS
Re
Un petit peu de reflexion et tu devrais trouver seul ...
Bien sûr, la déclaration de ta classe génératrice d'évènement va dans la partie déclaration de ta forme.
Bien sûr la déclaration de l'évènement est celle qui existe déjà dans ta classe, je n'ai fait que rajouter un paramètre qui sera transmis avec le RaiseEvent.
Le MsgBox, lui, va dans l'évènement ChangerRayon, là où tu l'avais déjà mis. La seule différence, c'est qu'il affichera une donnée qui lui ait fournie par l'évènement (donc qui vient de ta classe) et pas la valeur 'Rayon' qui n'existe que dans ta forme.

Si tu ne comprends pas, laisse tomber. Contente toi de mettre la déclaration de ton instance de classe dans la partie déclaration de ta forme, ça suffira pour faire délencher l'évènement par le RaiseEvent.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro

vendredi 7 juillet 2006 à 04:42:32 | Re : withEvents

PCPT

Administrateur CodeS-SourceS
salut,
à noter qu'un module ne peut recevoir d'évènement

++

Prenez un instant pour répondre à ce sondage svp

vendredi 7 juillet 2006 à 10:29:18 | Re : withEvents

lispo

Re-bonjour,
 Je suis désoler de te faire perdre ton temps(Jack), mais ce qui  parait a toi chose facile,   parait a moi etre un gouffre 
voila j'ai fais les modification mais toujour pas d'evenement,il ne bloque pas, mais pas de msgbox quand je change le rayon du cercle!
ça serais vraiment genial si tu pouvais m'aider
merci encore.

''Donc dans  mon module de clase

Public Event RayonChanger(ByVal Valeur As Double)
Private C_Rayon As Double
Private C_Air As Double
Private C_Centre As Variant
Public Objcercle As AcadCircle
Private Sub Class_Initialize()
    C_Rayon = 1
End Sub

Public Property Let Rayon(Valeur As Double)
    C_Rayon = Valeur
    RaiseEvent RayonChanger(C_Rayon)
End Property

Public Property Get Rayon() As Double
   Rayon = C_Rayon
End Property

Public Property Let Centre(Valeur As Variant)
    C_Centre = Valeur
End Property

Public Property Get Centre() As Variant
   Centre = C_Centre
End Property

Public Property Get Air() As Double
    Air = 2 * 3.14159265358979 * C_Rayon
End Property

Public Property Get Circonference() As Double
    Circonference = 3.14159265358979 * (C_Rayon * 2)
End Property

Public Property Get Pos_Centre() As Variant
Pos_Centre = Centre(0) & " / " & Centre(1) & " / " & Centre(2)
End Property

Public Property Get Diametre() As Double
Diametre = 2 * C_Rayon
End Property

Function Draw_Cercle() As Object
Set Objcercle = ThisDrawing.ModelSpace.AddCircle(Centre, Rayon)
Objcercle.Update
End Function
Private Sub cercle1_RayonChanger()
MsgBox "Rayon a changer " & CStr(Valeur)
End Sub
'---------------------------------------------------------

' et dans ma Form
Private WithEvents Cercle1 As cercle

Private Sub UserForm_Click()
Dim Cercle1 As New cercle
Me.Hide
With ThisDrawing.Utility
Cercle1.Centre = .GetPoint(, " Centre !")
Cercle1.Rayon = 50
End With
Cercle1.Draw_Cercle
End Sub






vendredi 7 juillet 2006 à 12:15:22 | Re : withEvents

PCPT

Administrateur CodeS-SourceS
salut,



'   dans le module de classe (nommé ici "Class1")
'
Private C_Rayon As Double 
Private C_Air As Double 
Private C_Centre As Variant 
Public Objcercle As New AcadCircle 
Public Event RayonChanger(ByVal Valeur As Double

Private Sub Class_Initialize() 
    C_Rayon = 1 
End Sub 
Private Sub Class_Terminate() 
    
Set Objcercle = Nothing 
End Sub 

Public Property Let Rayon(Valeur As Double
    C_Rayon = Valeur 
    
RaiseEvent RayonChanger(C_Rayon) 
End Property 
Public Property Get Rayon() As Double 
   Rayon = C_Rayon 
End Property 

Public Property Let Centre(Valeur As Variant
    C_Centre = Valeur 
End Property 
Public Property Get Centre() As Variant 
   Centre = C_Centre 
End Property 

Public Property Get Air() As Double 
    Air = 2 * 3.14159265358979 * C_Rayon 
End Property 
Public Property Get Circonference() As Double 
    Circonference = 3.14159265358979 * (C_Rayon * 2) 
End Property 
Public Property Get Pos_Centre() As Variant 
    Pos_Centre = Centre(0) & " / " & Centre(1) & " / " & Centre(2) 
End Property 
Public Property Get Diametre() As Double 
    Diametre = 2 * C_Rayon 
End Property 

Function Draw_Cercle() As Object 
    
Set Objcercle = ThisDrawing.ModelSpace.AddCircle(Centre, Rayon) 
    Objcercle.Update 
End Function 







'   dans la form (nommée Form1, exemple en VB6, pas VBA....)
'
Private WithEvents Cercle1 As Class1 

Private Sub Form_Click() 
    Me.Hide 
    
With ThisDrawing.Utility 
        Cercle1.Centre = .GetPoint(, " Centre !") 
        Cercle1.Rayon = 50 
    
End With 
    Cercle1.Draw_Cercle 
End Sub 

Private Sub Form_Unload(Cancel As Integer
    
Set Cercle1 = Nothing 
End Sub 

Private Sub cercle1_RayonChanger(ByVal Valeur As Double
    
MsgBox "Rayon a changer " & CStr(Valeur) 
End Sub


Coloration syntaxique automatique [AFCK]
       

évènements de la Form à remplacer par ceux du UserForm

++
PCPT   [AFCK]


Prenez un instant pour répondre à ce sondage svp

vendredi 7 juillet 2006 à 12:53:37 | Re : withEvents

jack

Administrateur CodeS-SourceS
Re
PCT a été plus rapide et plus complet dans la réponse.
"Module" : Comme c'est sous VBA, des fois les termes changent par rapport à VB6, c'est pourquoi je n'avait pas relevé ce détail.

Lispo : Tes corrections sont correctes.
Il faut en effet juste vérifier que :
La déclaration  Private WithEvents Cercle1 As Class1 soit bien dans une Forme
ET que la déclaration  Private Sub cercle1_RayonChanger(ByVal Valeur As Double)  soit elle aussi dans la Forme
ET que sa syntaxe reflète bien la déclaration (avec le/les paramètres)

Si le terme Module en VBA est le même que sous VB6, tu ne peux pas générer d'evènement à partir d'un module mais uniquement à partir d'un Objet

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro

vendredi 7 juillet 2006 à 15:38:45 | Re : withEvents

lispo

Re-Bonjour,
Aujourd 'hui je suis accrocheur,j'ai refait toutes les modifications .
mais!( il y a toujour un mais) il beug
il beug sur ma Form le msg  d'erreur dit run-time error 91 - Object Variable or With block variable not set
Voila le contenu de ma  Form
 
Private WithEvents Cercle1 as cercle

 Private Sub UserForm_Click()
 Me.Hide
 With ThisDrawing.Utility
 Cercle1.Centre = .GetPoint(, " Centre !")
 Cercle1.Rayon = 50
 End With
 Cercle1.Draw_Cercle
 End Sub

 Private Sub cercle1_RayonChanger(ByVal Valeur As Double)
 ''MsgBox "rayon a changer " & CStr(Valeur)
 End Sub

vendredi 7 juillet 2006 à 16:21:46 | Re : withEvents

PCPT

Administrateur CodeS-SourceS
comment se nomme ta classe ?




Prenez un instant pour répondre à ce sondage svp


1 2

Cette discussion est classé dans : public, centre, get, property, rayon


Répondre à ce message

Sujets en rapport avec ce message

Création d'attributs sur controle [ par Emcy ] Bonjours, j'ai créer un composant à partir du controle Label. Je voudrais ajouter les propriétés Grid.X et Grid.YLe code ci-dessous fonctionne (j'arri un For Each que ne fonctionne pas avec une collection maison ! [ par EMMANUELTAVE ] bonsoir, Je transforme une application VB6 en VB2005 : Ouf je m'acroche !voici ma classe de base : rien de tres .....< WithEvent [ par lispo ] Bonjour a tous et a toutes, Je me suis un peux égaré dans ma structure Comment surcharger la classe "ListView" pour intégrer un "DataSource" [ par kriesgraf ] Je souhaitais avoir un control ListView avec des grandes icônes qui soit rempli à partir d'une collection d'object "bindable" du genre:Control.DataSou Sérialiser un collection [ par fiko81 ] Bonjour à tous,Je voulais savoir s'il était possible de  serialiser une classe qui possède une collection ?Exemple :Par exemple : Public MustInherit C Que choisir : "Property Get" ou "Function" ? [ par PROGRAMMIX ] Bonjour,Je recommence à programmer en tentant l'utilisation de classes et collection.En tapant mon code à plusieurs jours d'intervalle, je me suis ren erreur dans l'addition [ par andregoub ] Bonjourj'ai fait un petit Programme en me servant de l'objet class j'ai une erreur au niveau de l'addition au lieu d'additionnerle résultat est exempl property set et get d'une structure? [ par JeremyNeReculeraPas ] Bonjour à tous!j'aimerais savoir s'il est possible de "set" une structure "variable par variable" comme on le ferait pour les cases d'un tableau ?un b la POO avec VB6 [ par zey971 ] Bonjour Je travail sous vb6 en POO en connexion a une base Mysql et voici mon problemej'ai déclarer un classe presenté ci dessous 'Classe ListeOP property get [ par cam8 ] Bonjour, J'aurais besoin d'aide pour créer une procédurequi renvoi un tableau mais pour le créer j'ai besoin d'une variable en entrée que je rentre co


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.