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 !

COURS DE VISUAL BASIC .NET 2005: DES POINTS OBSCURS EXPLIQUÉS


Information sur le tutorial

Catégorie :VB.NET Tutorial .NET ( DotNet ) Date de création : 01/05/2007 11:32:37 Vu : 32 283 fois

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (29)
Ajouter un commentaire et/ou une note

Description

Mon tutorial est un cours de Visual Basic .net 2005, qui a pour objectif d'éclaircir le lecteur sur des points confus de VB .net. En effet, j'ai constaté que certains points de VB .net sont inexpliqués. Et qu'aucune explication n'est disponible sur certains points précis, sur lesquels je suis sûr beaucoup de gens s'interrogent. Ce tutorial n'est donc pas un cours exhaustif. Il a pour ambition d'aider certaines personnes là où moi même j'ai été bloqué.

Tutorial

SOMMAIRE

I) GENERALITES

I.1) La classe "form1"; le formulaire principal

I.2) Des objets créés par visual studio

I.3) Les variables qui contiennent des références

I.4) Le fonctionnement du garbage collector

II) CREER SES PROPRES EVENEMENTS EN VB .NET

II.1) Rappel sur les procédures liées( aux évènements)

II.2) La procédure à suivre pour créer ses évènements

COURS VISUAL BASIC .NET 2005

I) GENERALITES

 Ceci n'est pas un cours classique. Je veux dire que vous ne trouverez pas ici un cours qui vous apprendra visual basic .net du début à la fin. Ce cours s'adresse à des gens qui connaisse déjà ce langage, ou à des gens qui sont en train de l'apprendre sur un autre cours. Mon ambition est juste d'éclaircir certains points de visual basic .net qui ne sont pas précisés ailleurs, et qui sont très utiles pour comprendre véritablement VB. En apprenant moi-même Visual Basic, à certains moments il m'était difficile d'assimiler certaines choses à cause d'un manque d'explications données sur, par exemple, la façon dont se passent les choses réellement.
 Ce cours est donc un fourre-tout, où vous trouverez des précisions sur un peu tous les sujets de visual basic. A vous donc d'y chercher ce dont vous avez besoin. Je le complèterai petit à petit.

I.1) La classe "form1"; le formulaire principal

 Lorsque vous créez une windows application dans visual studio 2005, visual studio vous crée par défaut une classe qu'il appelle ( par défaut ) form1. Vous vous retrouvez donc avec un code de cette classe form1.

 Cependant, une question intéressante est de s'étonner qu'une simple classe va créer et afficher un formulaire windows! Car en fait, créer une classe, c'est juste une déclaration d'une classe, et c'est tout. Cela ne fait pas plus que cela. J'imagine que beaucoup de débutants pensent que c'est ce code de la classe form1 qui, exécuté, va afficher le formulaire windows! Et bien non, ce n'est pas cela. Le code de la classe form1 sert uniquement à définir une classe, comme n'importe quelle définition de classe.

 Visual studio va, en réalité, ajouter du code supplémentaire qui va, d'abord, créer un objet de cette classe. Donc un objet formulaire. Puis il va afficher cet objet. Il ajoute donc l'équivalent des lignes suivantes( ce code n'est pas situé à l'intérieur de la classe form1, mais dans le programme principal ):

Dim formu as new form1
formu.show( )

 Et voilà, voici l'explication de comment cela se fait qu'un formulaire s'affiche quand on exécute l'application!

I.1.1) Comment récupérer l'objet formulaire

 Il existe un problème: on ne connaît pas le nom de cet objet formulaire, que VB crée de manière transparente! Il se peut qu'il l'appelle aussi "form1", car la propriété "name" de la classe form1, contient "form1". Mais cela ne nous avance pas beaucoup, car quand on tape "form1" dans l'éditeur(EDI), visual croit qu'on parle de la classe form1. Donc aucun moyen ( à ma connaissance ) d'accéder aux membres d'instance( c'est-à-dire aux membres non shared ) de l'objet formulaire, en dehors de la classe form1. Car dans la classe form1, on peut accéder aux membres d'instance car on se trouve dans la classe de l'objet formulaire.

 La solution que j'ai trouvée est de déclarer une variable globale dans un module standard.

 Par exemple, dans un module standard module1, on crée une variable globale appelée "formu_pr"( formulaire principal). On crée le module standard avec add new item, et en choisissant module.

Puis on déclare la variable globale:
 Public formu_pr as form1

Ainsi, on déclare une variable globale formu_pr, qui est capable de contenir un objet de la classe form1.
 On peut dire aussi que formu_pr est une référence sur un objet de la classe form1. C'est-à-dire que formu_pr contient l'adresse d'un objet de la classe form1. Cette variable contiendra l'adresse du formulaire principal.

 Ensuite, il suffit d'ajouter dans le form1_load: formu_pr = me .
Ainsi, dès le démarrage du programme, la variable formu_pr sera initialisée avec l'objet formulaire principal. Car, à l'exécution, visual va d'abord créer un objet formulaire( code caché):
 dim formu as new form1.

Puis il va faire( code caché):
 formu.show( )

Le formu.show va exécuter d'abord formu.load( avant d'afficher le formulaire à l'écran). Donc il va initialiser notre variable globale: formu_pr = formu( car me=formu, ici). Donc formu_pr contiendra bien, dès l'exécution du programme, l'objet formulaire principal!

 Désormais, dans toute notre application, on pourra utiliser formu_pr comme bon nous semblera, afin d'accéder aux membres non partagés( non shared) du formulaire principal, en dehors de la classe form1. Simplement en faisant formu_pr.propriété( par exemple formu_pr. size ), ou formu_pr.méthode( par exemple formu_pr.activate( ) ) . Sans notre variable formu_pr, il nous aurait été impossible d'accéder à la propriété size du formulaire, ou à sa méthode activate( en dehors de la classe form1).

I.2) Des objets créés par visual studio

 Il existe un point intéressant à souligner. Certaines méthodes de visual basic .net créent des objets elles-mêmes. Puis elles nous renvoient la référence de cet objet créé( afin qu'on puisse en profiter, par exemple le lire). Donc, dans ce cas, il n'y a pas de new à faire! Car c'est visual basic qui va faire ce new. Je suppose que le débutant ne sait jamais quand il doit faire un new ou pas. En comprenant ceci, cela l'aidera beaucoup. C'est en comprenant cela qu'on sait alors s'il faut faire le new( donc la création d'objet) ou pas.

 Prenons un exemple: la fonction shared system.enum.getvalues .
L'info bulle jaune de l'environnement de visual studio nous indique: Public Shared Function GetValues(enumType As System.Type) As System.Array .
C'est donc une méthode de la classe enum. Cette méthode est partagée, c'est à dire qu'elle est accessible sans avoir d'objet, en faisant system.enum.GetValues . Cette fontion sert à donner, pour une certaine énumération, toutes les valeurs possibles de cette énumération. Par exemple, une énumération EtatVoiture
Enum EtatVoiture
   ARRET
   DEMARRE
   ROULE
   FREINE
End Enum

Puis, à un autre endroit:
Dim etat as EtatVoiture

Lorsqu'on va faire :

   Dim tab as system.array
    tab = system.enum.GetValues( etat.GetType( ) )
    console.writeline( tab(0).tostring( ) )

Ceci va afficher "ARRET" dans la console.
tab(0) est de type EtatVoiture. Donc en faisant tab(0).tostring( ), on applique la méthode tostring() particulière à la classe enum. Tab(0).tostring( ) vaut dont une string "ARRET".

 Ce qui est à retenir de cet exemple, c'est que le programmeur n'a pas dû créer le tableau tab avec un new. Il a juste créé une variable référence, qui contient l'adresse du tableau en mémoire. Il n'a pas fait de new dans Dim tab as system.array.
On remarque donc que c'est la méthode GetValues qui a créé un objet de la classe system.array . Elle a donc fait le new elle-même!

 Il est important de prendre conscience qu'il arrive que certaines fonctions ou procédures de visual basic créent des objets toutes seules. Ce qui peut paraître un peu étrange. Il ne faut donc pas faire de new dans ce cas.

I.3) Les variables qui contiennent des références

 Prenons l'exemple suivant:

Dim voit as new voiture

 Bien sûr, on peut affirmer que "voit" est un objet voiture, qui a été créé avec new( par exemple à l'adresse 10000, adresse purement fantaisiste).
 Mais "voit" est aussi une variable locale qui est créée, et qui a été initialisée avec la référence à l'objet voiture, c'est à dire l'adresse de l'objet voiture, soit 10000.
 Donc, sous le nom "voit", il y a deux choses distinctes
- "voit" est l'objet de la classe voiture, situé à l'adresse 10000
- "voit" est une variable locale, qui est créée par visual basic, et à laquelle il affecte le nombre 10000.

Selon le contexte, on parle soit de l'un, soit de l'autre. Mais il faut bien comprendre que "voit" peut désigner deux choses distinctes. Le programmeur, notamment débutant, n'a pas toujours conscience de cela. Et il ne distingue pas clairement, dans son esprit, ces deux éléments. Souvent, il ne pense qu'à la voiture "voit" elle-même, sans avoir compris qu'il existe également une variable locale qui a été créée, et à qui on a affecté la référence de l'objet "voit".

I.4) Le fonctionnement du garbage collector

I.4.1) Définition générale

 Le langage visual basic 2005 .net possède un garbage collector. C'est une technologie qui nous permet de ne pas avoir à libérer( comme en langage C, par exemple) la mémoire qu'on nous a allouée dynamiquement( c'est à dire lors d'un new ).
 Ce système évite les oublis de libération de mémoire, qui sont un souci constant pour le programmeur C, et qui peuvent être catastrophiques.
 De plus, certaines classes, qui sont l'objet d'allocation importante de mémoire, comme la classe image, possèdent une méthode dispose. Cette méthode permet de libérer nous-même la mémoire, sans avoir à attendre le garbage collector.
 Par conséquent, le système utilisé par visual basic quant à la libération de la mémoire cumule les avantages des deux façons de procéder pour libérer la mémoire.

I.4.2) Fonctionnement détaillé

 Cependant, une question se pose, qui me laissait perplexe. D'accord, le garbage collector libère la mémoire dont on n'a plus besoin. Mais comment s'y prend t-il pour savoir qu'on n'a plus besoin de cette mémoire, étant donné qu'on ne lui demande jamais de la libérer?

 Le principe est le suivant. Prenons l'exemple qui suit.

 public sub form1_load( ... )
    ma_procedure( ) 'Appel de ma_procedure
   'Après l'appel, la variable locale 'voit' n'existe plus
   'Donc l'objet voit, n'étant plus référencé par aucune
   'variable de référence, est détruit par le garbage
   'collector
 end sub

 Public sub ma_procedure( )
 Dim voit as new voiture( )

 End Sub

 Dans la sub ma_procedure, un objet de la classe voiture est créé en mémoire. Puis une variable locale voit est créée, et elle est initialisée avec la référence de l'objet voiture. Dans form1_load, on appelle ma_procedure. Après l'appel, la variable locale voit est détruite( car on quitte la sub qui l'a créée ). Et l'objet de la classe voiture n'est alors plus référencé par aucune variable. Et il ne pourra plus être utilisé, si on ne sait pas où il se trouve! Le garbage collector peut alors en déduire que c'est un objet qui n'est plus utilisé, et il peut le détruire.

Conclusion: le garbage collector détruit les objets qui ne sont plus référencés par aucune variable de référence.

Remarque: il est aussi possible de détruire certains objets 'manuellement'. L'avantage est que la libération de la mémoire se fait plus rapidement, dès qu'on le demande. Et on sait aussi quand elle a lieu. Ceci est le cas des objets qui ont une méthode dispose( ). Ainsi, la classe image a une méthode dispose( ), qui, si elle est appelée, libère l'espace mémoire qui était utilisé par l'image. Visual basic a prévu une méthode dispose pour les gros objets, comme les images. La classe system.windows.forms.control( celle dont hérite tous les contrôles) possède une méthode dispose( ) également.

II) CREER SES PROPRES EVENEMENTS EN Visual Basic .NET

  Il est bon de savoir créer ses propres évènements, afin de pouvoir faire sa propre programmation évènementielle.
  Il est possible de réaliser cela en Visual Basic .net, mais aussi en C# et en c++ .net . Voici les différentes étapes à suivre.
  Prenons l'exemple d'une classe voiture, qui crée des objets voiture. On veut pouvoir disposer d'un évènement FREINE, qu'on déclenchera au freinage d'une voiture.

II.1) Rappel sur les procédures liées( aux évènements)

  On peut observer très facilement, par rapport aux lignes générées automatiquement par visual studio en cas d'évènement windows, que la procédure liée est de la forme suivante

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Ceci est donc une procédure qui sera appelée en cas de click sur le bouton1.
Le 'Handles' est un mot-clé spécifique à VB, qui permet d'indiquer qu'on souhaite lier cette procédure à l'évènement click du Button1. 'Button1.Click' veut dire: l'évènement Click de l'objet Button1. Car l'objet Button1 possède un membre event( nous verrons bientôt ce qu'est un membre event), qui s'appelle Click, mais qui n'est pas visible en VB par le programmeur de l'objet Button1.

Cette procédure Button1_Click possède deux paramètres.

  - sender, qui est un objet. sender est l'objet qui a émis l'évènement. L'émetteur de l'évènement peut y mettre ce qu'il veut. C'est juste une information pour la procédure liée, pour la renseigner. Ici, le sender est l'objet button1, donc on n'a pas l'impression que ce paramètre est utile. Mais parfois, il est nécessaire. Par exemple, dans notre cas, on pourrait y mettre la voiture qui freine.

  - L'argument e est un objet, qui encapsule toutes les informations intéressantes concernant l'évènement. Par exemple, dans le cas d'un appui sur une touche, le code de la touche pressée.
Dans notre cas, cela peut être les circonstances au moment du freinage( pluie, soleil, etc), la vitesse au moment de freiner, etc.
Cet argument doit forcément être d'une classe qui hérite de la classe System.EventArgs . Par exemple, dans le cas de l'évènement KeyDown:

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

Le e ici est de la classe KeyEventArgs, qui est une classe qui hérite de la classe EventArgs. La classe KeyEventArgs est spécialement adaptée pour cet évènement. Elle possède notamment un attribut e.KeyCode, qui est le code de la touche pressée. Ce KeyCode ne figure pas, par contre, dans la classe EventArgs. Cet objet e est là pour aider la procédure liée. Pour lui donner des informations que l'évènement KeyDown seul, ne suffit pas à donner( il nous indique juste qu'une touche a été enfoncée). Le e est donc nécessaire.

II.2) La procédure à suivre pour créer ses évènements

  Pour créer ses propres évènements, la façon de procéder est composée de plusieurs parties.

- Créer sa propre classe EventArgs
- Se créer une classe EmetEvent, qui permettra de créer un objet émetteur d'évènements.
- Procéder à quelques déclarations et initialisations, à l'extérieur, par exemple dans la classe Form1( votre classe de formulaire principal). Par exemple se créer un objet émetteur d'évènements.

  Nous étudierons un exemple complet, celui des objets voiture et de l'évènement FREINE.

II.2.1) Créer sa propre classe EventArgs

  Nous devons tout d'abord nous créer notre propre classe EventArgs, qui tient compte des particularités de notre évènement. Faisons la dans un module de classe appelé VoitEventArgs.vb

Public Class VoitEventArgs
   Inherits System.EventArgs
   Public type_freinage As String 'pluie, etc
   Public vitesse_fr As Integer 'vitesse au moment de freiner

   Public Sub New( )
   End Sub

   Public Sub New(ByVal type_fr AsString)
      Me.type_freinage = type_fr
   End Sub

End Class

  Notre classe VoitEventArgs hérite de la classe System.EventArgs, bien sûr.

  Puis nous avons les 2 propriétés type_freinage et vitesse_fr, qui vont donner au programmeur des renseignements sur l'évènement FREINE. Enfin nous avons 2 constructeurs de la classe. L'objet e nous concernant sera donc une instanciation de la classe VoitEventArgs.

II.2.2) Créer une classe EmetEvent

  Créons cette classe dans un module de classe EmetEvent.vb .
  Cette classe servira à créer un objet émetteur d'évènement. Cet objet sera utilisé pour émettre l'évènement FREINE. Et un de ses membres sera un event FREINE.
  On ne peut émettre des évènements qu'à partir de la classe qui contient le membre event. C'est pour cela que pour émettre des évènements FREINE, nous prévoirons des méthodes à l'intérieur de l'objet émetteur d'évènements. Ainsi la méthode emet_freine_pluie émet un évènement FREINE, avec un e.type_freinage à "pluie".
On pourra appeler cet méthode de n'importe où, donc émettre des évènements de n'importe où.

  Le constructeur de EmetEvent commence par créer un objet e_voit( une des propriétés de EmetEvent).

  VoitEventHandler est en réalité une classe qui hérite de la classe System.EventHandler . Les objets EventHandler contiennent les adresses des procédures liées aux évènements. Ainsi le framework saura quelles méthodes appeler dans le cas du déclenchement de l'évènement.
Les procédures liées mises dans les objets de la classe EventHandler doivent avoir obligatoirement 2 paramètres: un sender de type object, et un objet e d'une classe dérivée de la classe EventsArgs. Et ces procédures doivent être des sub, par conséquent ne rien retourner.

Cependant, le VoitEventHandler est déclaré dans la classe comme une procédure "déléguée". Et on fait une sorte de déclaration de son prototype. Cette notion de déléguée est juste une vue de l'esprit, pour simplifier les choses. VoitEventHandler n'est pas une procédure en réalité, mais un objet( quand la classe sera instanciée) contenant toutes les adresses des procédures liées. On peut voir VoitEventHandler comme UNE procédure déléguée, représentant toutes les procédures liées. Et on déclare ainsi le prototype de cette procédure déléguée. Grâce à cet déclaration de prototype, le framework saura le prototype de toutes les procédures liées( qui auront toutes ce prototype).
Je vous conseille de voir l'objet de la classe VoitEventHandler comme un objet de la classe System.EventHandler( un 'traiteur' d'évènements ); et de ne pas voir VoitEventHandler comme une procédure, car ce n'en est pas une. D'ailleurs les membres event, tel FREINE, sont déclarés comme des objets de la classe EventHandler( dans notre cas de la classe VoitEventHandler).

  On déclare ensuite un membre event. Event n'est pas un type, c'est un genre de membre. Il y a les attributs, les méthodes, et les events! . On appelle cet event: FREINE. Cet event est un objet de la classe VoitEventHandler. Ainsi, un évènement, est juste un objet traiteur d'évènements, qui contient les références de toutes les procédures liées. Ce qui est logique. Attention, en Visual Basic, les membres event, même public, ne sont pas visibles( par exemple en utilisant intellisense, vous ne les verrez pas). Mais ils sont tout-de-même présents.

  Enfin, on se prévoit des méthodes, telles emet_freine_pluie, qui sauront capables d'émettre des évènements de n'importe où dans notre programme. Et avec un objet e rempli d'une manière qui nous arrange. Emet_freine_pluie, par exemple, non seulement émet un évènement FREINE, mais en plus fournit un e avec le champ e.type_freinage = "pluie". On pourra appeler par exemple emet_freine_pluie à partir de la form1!

   RaiseEvent est spécifique à VB. Il permet de déclencher un évènement, ici FREINE.

Public Class EmetEvent
   Public Delegate Sub VoitEventHandler(ByVal sender AsObject, ByVal e As VoitEventArgs)
   Public Event FREINE As VoitEventHandler
   Public e_voit As VoitEventArgs = New VoitEventArgs( )
   Public Sub New( )
   End Sub

   Public Sub emet_freine_pluie(ByVal sender AsObject)
      e_voit.type_freinage = "pluie"
      RaiseEvent FREINE(sender, Me.e_voit)
   End Sub

   Public Sub emet_freine_soleil(ByVal sender As Object)
      e_voit.type_freinage = "soleil"
      RaiseEvent FREINE(sender, Me.e_voit)
   End Sub
End Class

II.2.3) Les déclarations à l'extérieur

- Se créer un objet émetteur d'évènement, de la classe EmetEvent, par exemple comme attribut de la classe Form1.

Public WithEvents Emetteur_Ev_Voit As New EmetEvent( )

Il est nécessaire de déclarer en WithEvents l'objet Emetteur_Ev_Voit. Etant donné que c'est un objet capable de déclencher des évènements, VB .net oblige à le déclarer avec le mot clé 'WithEvents'.

Puis, dans le form1_load(ou autre), si cela n'a pas été fait comme ci-dessus::

this.Emetteur_Ev_Voit = newEmetEvent( );

- Dans le cas où vous souhaitez lier "à la main" votre procédure, sans utiliser le "handles" de VB( sinon ne faites rien):

Dans le form1_load, par exemple, ajouter notre évènement à notre objet de la classe VoitEventHandler( donc au membre event FREINE).

AddHandler Emetteur_Ev_Voit.FREINE, AddressOf  Me.ma_sub_liee

  On ajoute( "Add") à notre membre FREINE, qui est un objet VoitEventHandler,  l'adresse de la procédure liée, c'est donc un pointeur de procédure.
  Vous pouvez ajouter, de cette manière, autant de procédures liées que vous le souhaitez.

- Ensuite, on peut déclencher les évènements comme bon nous semble, en appelant les méthodes de la classe EmetEvent

Me.Emetteur_Ev_Voit.emet_freine_pluie(Me)

le 'Me' en paramètre correspond au formulaire principal de la classe form1, dans mon exemple. On aurait pu mettre la voiture qui freine.

- Et bien sûr, il faut se faire ses procédures liées, exactement de la même manière que pour les évènements windows.

Public Sub ma_sub_liee(ByVal sender As System.Object, ByVal e As VoitEventArgs) Handles Emetteur_Ev_Voit.FREINE
   Console.WriteLine("1 évènement émis")
   Console.WriteLine("e.type_freinage: " & e.type_freinage)
   Console.WriteLine("le sender est:" & sender.ToString( ))
End Sub

01 mai 2007 11:52:25 :
Nouvel essai de soumission car le tutorial ne s'affichait pas
01 mai 2007 18:56:41 :
Test de soumission, car je n'arrive pas à soumettre mon tuto! Désolé pour ceux qui sont déçus. J'essaye de résoudre le problème
01 mai 2007 19:20:12 :
Essai de soumission du tuto
03 mai 2007 20:46:35 :
Essai d'un petit morceau
06 mai 2007 08:19:35 :
Nouveau test de soumission d'un petit morceau du tuto
06 mai 2007 12:40:27 :
Soumission en passant par IE, et non plus par Firefox. Merci Econs et Coq
06 mai 2007 16:05:06 :
nouvelle soumission
08 mai 2007 08:09:07 :
Soumission de la première moitié du tutorial
11 mai 2007 16:32:20 :
Soumission de la totalité du tuto. Merci aux administrateur d'avoir corrigé le problème pour la soumission précédente :)
11 mai 2007 16:33:04 :
Soumission de la totalité du tuto. Merci aux administrateur d'avoir corrigé le problème pour la soumission précédente :)
signaler à un administrateur
Commentaire de tirole le 01/05/2007 19:12:40

Mes excuses pour le tuto qui ne s'affiche pas, mais je n'arrive pas à le faire afficher! En attendant vous pouvez patienter en retrouvant le contenu sur mon site perso. Merci à Codes-Sources.com de m'aider à afficher mon tuto!

signaler à un administrateur
Commentaire de econs le 02/05/2007 16:44:12 administrateur CS

Qu'as-tu mis dans ton tutoriel de si particulier ?
As-tu un message d'erreur à la soumission du tutoriel ?

signaler à un administrateur
Commentaire de tirole le 02/05/2007 19:32:46

Bonjour. J'ai rien mis de spécial dans le tuto. Je fais un copier-coller de ma page html( pas le code source html bien sûr). J'ai pas de message d'erreur à la soumission, ça dit que c'est ok. Mais seulement, rien ne s'affiche :(

signaler à un administrateur
Commentaire de tirole le 02/05/2007 19:34:25

Au fait, j'ai soumis le tuto par la textbox, j'ai pas word 2007

signaler à un administrateur
Commentaire de econs le 02/05/2007 20:46:20 administrateur CS

As-tu essayé de le soumettre "par morceaux" ?
D'abord le premier chapitre, pour voir si çà passe. Si oui, tu modifies le tuto en ajoutant le deuxième chapitre,... etc
Ca permettrait peut-être de trouver ce qui coince.

signaler à un administrateur
Commentaire de tirole le 04/05/2007 06:48:15

Merci econs. J'ai essayé un tout petit bout, le début, mais ça marche pas. Et puis j'ai même essayé un petit texte d'essai tout simple sans aucune complications,que j'ai tapé dans la textbox à la main: ça marche pas non plus. Je laisse tombé

signaler à un administrateur
Commentaire de econs le 06/05/2007 11:54:25 administrateur CS

Si tu utilisais Firefox pour poster ton tutoriel, essayes avec IE
Il y a quelques soucis en ce moment avec Firefox.

signaler à un administrateur
Commentaire de tirole le 06/05/2007 11:57:51

Merci beaucoup Econs. On venait de me dire justement d'essayer avec IE, car j'essayais avec Firefox. Et tu as raison, je viens d'essayer sur csharpfr, ça marche! Merci encore Econs :)

signaler à un administrateur
Commentaire de OneHacker le 11/05/2007 16:48:50

Merci pour le tuto, court mais le passage concernant le Garbage Collector m'a été utile.

signaler à un administrateur
Commentaire de tirole le 11/05/2007 19:27:38

Mon objectif est atteint, alors, si ça t'a aidé :)

signaler à un administrateur
Commentaire de zn415 le 24/07/2007 15:48:24

Ca semble tres interressant mais je ne comprends pas a quel endroit vous voyez

dim formu as form1  
formu.show()

j'ai beau chercher je ne trouve pas a quel endroit ça ce trouve.(a propos de la partie 1.1)

signaler à un administrateur
Commentaire de tirole le 24/07/2007 19:40:34

En visual Basic, à ma connaissance, on peut pas voir ces lignes. Mais ce qui n'empêche pas qu'elles peuvent être intégrées par le compilateur au code compilé;) . En c# par exemple, c'est visible, dans le main.cs .

signaler à un administrateur
Commentaire de zn415 le 24/07/2007 21:20:20

Comment avez vous découvert cela ?

Est ce que ça veut dire que C# et plus evident a comprendre pour un debutant? C'est bizarre que ce soit pas transparent pour le programmeur ce genre de truc. ca facilite pas la comprehension.
merci pour votre reponse

signaler à un administrateur
Commentaire de tirole le 25/07/2007 07:39:07

J'ai découvert cela car ca me paraissait impossible que juste créer une classe Form1 suffise. Car il n'y avait pas d'objet créé, c'est pas logique. Donc je me suis dis qu'ils ont caché l'instanciation du formulaire, pour simplifier au maximum. Ainsi, le programmeur se préoccupe uniquement de sa classe Form, et ca marche. Je trouve aussi que, au final, ca complique de beaucoup la compréhension. Et c'est pour cela que je tenais à expliquer ce point!
Ceci dit, Visual Basic est parfait pour comprendre les notions de programmation objet. C'est un excellent langage d'apprentissage, pour essayer des choses qu'on n'a pas compris, ou pour essayer des algorithmes.
C# ne cache rien, donc il peut parfois faciliter la compréhension, et au moins on est sûr qu'on nous cache rien. Mais Visual Basic garde son intérêt de grande simplicité. Par ailleurs, je trouve, pour répondre à ta question, qu'un débutant peut accéder directement aussi à c#.
Je ne crois pas qu'il faille être déçu par VB, car il possède quasiment autant de possibilités que c#. Et il est super doué pour apprendre, par sa simplicité. Bon courage.

signaler à un administrateur
Commentaire de Scalpweb le 12/11/2007 10:19:13

Le code de création de classe est accessible...

Il suffit de cliquer sur l'icone "afficher tous les fichiers" de l'explorateur de solution. On peut ainsi atteindre la définition de la classe Form1, qui est en fait uen classe "Partial". On y découvre l'appel à InitializeComponent() ainsi que tout le code de création de classe.

signaler à un administrateur
Commentaire de tirole le 12/11/2007 18:54:16

Je connaissais cet icône "afficher tous les fichiers". Mais je n'ai trouvé aucun fichier où l'instanciation de la classe Form1( je prends Form1 comme exemple) est effectuée. Le fichier dont tu me parles est le Form1.Designer.vb . C'est exact que c'est une partie de notre classe Form1: ce qui veut donc dire qu'on ne peut pas y trouver l'instanciation de cette classe! Car l'instanciation( le new Form1) doit avoir lieu à l'extérieur de la classe.

signaler à un administrateur
Commentaire de Kevin.Ory le 28/11/2007 01:10:30

Bonsoir tout le monde.

Très bon tutoriel pour apprendre qq bases qui peuvent sembler obscures, en effet.



Je voudrais toutefois apporter qq remarque, je commence par la question de la création du formulaire principal (discuté dans les

remarques):

Un lien tout d'abord: http://msdn2.microsoft.com/fr-fr/library/ms233841(VS.80).aspx

On y voit la séquence des appels des fonction au démarrage d'une application VB.NET. La fonction qui nous intéresse, est la

fonction "OnCreateMainForm", c'est elle qui définit le formulaire de démarrage de l'application.

Pour y accéder, aller dans Visual Basic 2005, cliquer "Afficher tous les fichiers" dans l'explorateur de solutions puis aller dans

"My Project\Application.myapp\Application.Designer.vb"

Si un formulaire de démarrage à été spécifié (par défaut, c'est fait lorsque on créer une nouvelle application Windows), vous

devrier avoir cette fonction:

Protected Overrides Sub OnCreateMainForm()
  Me.MainForm = Global.[Nom du projet].Form1
End Sub

Et voilà, c'est là qu'on spécifie le formulaire principal de l'application, c'est a dire celui qui est ouvert à son execution.

Il est vrai que c'est pas vraiment la qu'est créé le formulaire, mais cela nous donne tout de même un "visuel" de ce que modifie

l'IDE lorsque on change le formulaire de démarrage par l'interface des propriétées du projet.
Il faut savoir qu'une instance de chaque formulaire est créé au démarrage de l'application, c'est elle qui est passé à la

propriété MainForm.

Cette classe MyApplication (dans laquelle se trouve OnCreateMainForm()) est instanciée et est accessible par "My.Application".

Elle représente l'application, et elle fournit qq propriétés et fonctions utiles, par exemple:




I.1.1) Comment récupérer l'objet formulaire

tout simplement avec "My.Application.OpenForms" qui permet d'accéder à tous les formulaires ouverts (par index ou par nom).

Ou alors, encore plus simplement, par My.Forms (http://msdn2.microsoft.com/fr-fr/library/87y2hdsf(VS.80).aspx).

si votre formulaire principal s'appel form1, alors vous y aurez accès par My.Forms.form1

My.Forms contient les instances de chaque formulaire de l'application (créer au lancement, comme je l'ai dis plus haut)

Si vous voulez afficher l'un de vos autres formulaire, faite donc le plutot comme ca:

My.Forms.Form2.Show

plutot que de déclarer une nouvelle instance:

Dim Form2 as new form2
Form2.show

et si vous voulez accéder aux événement de l'un de vos formulaire, il suffit de déclarer "Private WithEvents form1 As Form1 =

My.Forms.Form1" dans votre classe




I.2) Des objets créés par visual studio

Ce qui est à retenir de cet exemple, c'est que le programmeur n'a pas dû créer le tableau tab avec un new. Il a juste créé une

variable référence, qui contient l'adresse du tableau en mémoire. Il n'a pas fait de new dans Dim tab as system.array.
On remarque donc que c'est la méthode GetValues qui a créé un objet de la classe system.array . Elle a donc fait le new elle-même!


Oui logique, une fonction retourne une valeur (une propriétée aussi d'ailleur), donc il n'y a pas besoins d'instancier la variable

de destination:

Dim NouvelleValeur as ValeurClass = CalculerValeur()
Dim Size as Size = Form1.Size
Dim Image as Bitmap = Bitmap.FromFile("C:\Image.jpg")

Et pas:

Dim NouvelleValeur as New ValeurClass = CalculerValeur()
Dim Size as New Size(34,23) = Form1.Size
Dim Image as New Bitmap("C:\Image.jpg") = Bitmap.FromFile("C:\Image.jpg")

Ce qu'il faut dire toutefois, c'est que certaines classes n'ont pas de constructeur, ou alors il est inutilisable. Dans ce cas il

est obligatoire d'instancier cette classe en appelant une propriétés ou une fonction


I.3) Les variables qui contiennent des références

La on revient vers ces bons vieux pointeurs (un cauchemard pour des jeunots comme moi ^^). Mais je pense inutile de nous

embrouiller avec ca, c'est completement transparent dans un langage comme VB.NET.

Par contre, il faut parler des variables valeur et des variable référence (ca en découle, mais pas besoins de comprendre les

pointeur pour comprendre ca):

En gros, une variable valeur est une valeur, une variable référence est un raccourcis vers une valeur (tout comme des fichiers et

des raccourcis windows pointant sur ces fichiers).

Si on copie une variable valeur: var2=var1, on fait vraiment une copie de la valeur. Donc si on modifie var2, var1 ne sera pas

touché. Les types de base (integer, single, string, etc) et les structures (point, rectangle, color, etc) sont des variables

valeur (sauf si elle sont passé par le mot clé ByRef à une fonction)

Par contre, si on copie une variable référence: ref2=ref1, on ne copie pas la valeur, mais on fait juste une copie du raccourcis.

C'est a dire que ref2 point vers la meme valeur que ref1. Si on mofie la valeur a travers ref2, les changements seront visible a

travers ref1. Vous pouvez faire bcp de copies de ref1, ce na changera que très peu la mémoire utilsé, puisque seul le raccourcis

est copié.

Si vous déclarer "dim form1 as form1 = My.Forms.form1", il s'agit de variables références. C'est pourquoi si vous changez une

propriété de form1, par exemple "form1.BackColor = Color.Red", les modifications sont répercuté sur l'effet visuelle de la fenetre

affiché. Si dim form1 était une réel copie de My.Forms.form1, les modifications qui lui sont apporté ne changerait pas

My.Forms.form1.

Vous me suivez? :p



I.4) Le fonctionnement du garbage collector

Les variables valeurs aussi sont libérés lorsque elles sortent de leur "context de déclaration"



II.2.2) Créer une classe EmetEvent

On peut aussi déclarer un événement sans devoir déclarer la delegate:

Public Event FREINE(ByVal Sender As Object, ByVal e As VoitEventArgs)




Voila, espérant que cela sera utile à qqun :)

Bonsoir

signaler à un administrateur
Commentaire de ghost19bassem le 08/12/2007 22:52:19

Très bon tutoriel

signaler à un administrateur
Commentaire de jlassimarwen le 02/01/2008 12:53:15

Merci

signaler à un administrateur
Commentaire de tirole le 02/01/2008 19:41:10

ca fait plaisir que c'est utile. Merci pour vos commentaires et encouragements

signaler à un administrateur
Commentaire de fello69 le 06/01/2008 01:37:42

Merci pour les renseignements couteux

signaler à un administrateur
Commentaire de boglib le 18/01/2008 21:15:13

merci khoya

signaler à un administrateur
Commentaire de papypatou le 30/01/2008 14:24:11

Merci pour ce tuto

signaler à un administrateur
Commentaire de tirole le 24/02/2008 20:55:49

salut Soumia. merci à vous tous :o)

signaler à un administrateur
Commentaire de ytoung le 12/05/2008 15:14:15

bonjour
je veux bien entrer dans votre jeu qui me senmble tres important mais seulement j'ai des connaisances tres linites en VB.
svp faite mois parvenir quelques unes a mon adress mail ; ytoung@yahoo.fr

signaler à un administrateur
Commentaire de BlueShadow le 18/07/2008 15:37:25

Merci bcp
Je suis q'un débutant parmi les pros
Et j'éspere que qqun m'aide a m'ameliorer avec des cours et examples qu'il pourais m'envoyer a:"allalimeziane@yahoo.fr"
et encore merci a tous

signaler à un administrateur
Commentaire de adnane640 le 31/07/2008 16:52:06

Merci

signaler à un administrateur
Commentaire de soumiholywell le 03/02/2009 11:53:38

thanks its really helpful

signaler à un administrateur
Commentaire de ramanis le 02/04/2009 15:14:06

merci pour ce tuto

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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 : 2,761 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é.