cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 10 oct. 2005 à 11:10
Nico : je pense que ton problème vient du type de contrôle que tu veux
instancier : par exemple, le contrôle Timer ne peux pas être instancié,
tu ne peux que lui passer qu'une copie d'instance déjà crée.
Si tu veux un cas concret : place un timer dans ta feuille nommé Timer1.
Si tu tape ceci :
Private Sub Form_Load()
Dim oTimer As Timer
Set oTimer = New Timer
End Sub
VB refuse de créer la nouvelle instance du timer, alors qu'avec :
Private Sub Form_Load()
Dim oTimer As Timer
Set oTimer = Me.Timer1
End Sub
Là ca marche bien.
Donc en gros, tu ne peux pas utiliser l'opérateur New pour créer une
nouvelle instance d'un contrôle ! (c'est le même principe que les
classes PublicNotCreatable d'une dll activeX : tu peux les utiliser,
mais pas les instancier à volonté).
Donc pour créer une instance d'un contrôle, il faut rajouter ce contrôle dans la collection des contrôles d'une feuille :
Private Sub Form_Load()
Dim oTimer As VB.Timer
Set oTimer = Me.Controls.Add("vb.timer", "Timer1")
End Sub
_____________________________________________________________________
DarK Sidious
Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
nico_fip1
Messages postés80Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention26 septembre 2006 10 oct. 2005 à 14:53
En fait, j'ain une classe, qui gêre une connexion Réseau, et j'aimerais que cette classe utilise un Timer ; donc je n'ai pas de Form dans laquelle déposer un objet.
Donc si j'ai bien compris ta réponse, une classe ne peux pas utiliser les contoles tels les Timer, ou tel les ActiveX.
Il faut OBLIGATOIREMENT que je crée un contrôle ActiveX dont l'interface utilisateur contient le Timer ?
Ai-je le droit d'écrire
Set oTimer = Me.Controls.Add("vb.timer", "Timer1")
dans un module de classe ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 10 oct. 2005 à 16:15
Ben non, vu que le Me va être inconnu, et surtout, la collection Controls appartient à l'objet Form et non à une classe !
Après, il est sûrement possible de faire autrement pour intégrer une
classe d'un contrôle dans une autre classe, mais je ne vois pas comment
(c'est pour cà que je râle à chaque fois que je vois un nouveau
contrôle ocx qui aurait très bien pu être développé en tant que dll
activeX : c'est le cas du timer et de Winsock : à part le petit carré
gris symbolisant le contrôle sur une feuille en mode création, pour le
manipuler, il faut écrire du code, donc j'avoue ne pas comprendre
pourquoi microsoft en a fait des contrôles et non des Classes ActiveX
directement !).
_____________________________________________________________________
DarK Sidious
Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/