Comment faire pour incorporer et accéder aux ressources à l'aide de Visual Basic .NET ou Visual Basic 2005

IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d’une traduction incorrecte du contenu ou de son utilisation par les clients.

La version anglaise de cet article est la suivante: 319291
Pour obtenir une version Microsoft C# .NET de cet article, reportez-vous à la section. 319292.
Pour obtenir une version Microsoft Visual Basic 6.0 de cet article, reportez-vous à la section. 205332.

DANS CETTE TÂCHE

Résumé
Cet article étape par étape décrit comment utiliser Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005 et incorporer des ressources dans le cadre de l'assembly, puis accéder aux ressources au moment de l'exécution.

back to the top

Vue d'ensemble

Le.NET Framework peuvent encapsuler des fichiers dans le cadre d'un assembly compilé. Ces fichiers sont connus en tant que ressources incorporées. Ces ressources sont totalement séparés des fichiers .resources et .resx qui sont associés à l'assembly. Vous pouvez accéder à ces ressources au moment de l'exécution par le biais de la classe de l'Assembly de l'espace de noms System.Reflection .

Un avantage majeur de l'incorporation de ressources du manifeste est que dans la mesure où les fichiers font partie de votre assembly compilé, l'utilisateur ne peut pas accidentellement supprimer ou égarer des fichiers qui sont cruciaux pour votre application, ce qui, dans certains cas, peut empêcher l'exécution de votre programme. Une limitation de cette approche est que vous ne pouvez pas enregistrer les modifications à ce fichier à l'assembly sans recompiler le programme. De ce fait, n'incluez que les fichiers qui ne changent pas pendant la durée de vie de votre application comme une ressource incorporée.

back to the top

Démonstration pas à pas

Pour ajouter des ressources incorporées à votre projet, vous devez d'abord ajouter les fichiers dans le cadre de votre projet. Une fois que vous avez ajouté les fichiers à votre projet, vous pouvez accéder et afficher les ressources par le biais de l'espace de noms System.Reflection .

back to the top

Ajouter des ressources incorporées

Pour ajouter un fichier texte et un fichier image à votre projet en tant que ressources incorporées, procédez comme suit :
  1. Créez un nouveau projet d'Application Windows pour thisdemonstration. Ce formulaire est utilisé pour afficher les ressources qui sont accessedfrom l'assembly en cours d'exécution au moment de l'exécution.
  2. Le bouton droit sur votre projet et cliquez sur Ajouter, puis cliquez sur Ajouter un nouvel élément.
  3. Dans la boîte de dialogue Nouvel élément , sélectionnez Fichier texte dans le menu et nommez le fichier MyTextFile.txt. Lorsque les fileopens dans l'environnement de développement intégré (IDE), ajoutez du texte et le fichier thenclose.
  4. Répétez les étapes 1 et 2 pour ajouter une image bitmap à votre projet, mais au lieu de sélectionner un Fichier texte en tant que le nouveau type d'élément, sélectionnez Fichier Bitmap, puis renommez le fichier MyImage.bmp. Lorsque la nouvelle image est ouvert dans l'IDE, dessinez quelque chose sur theimage et puis fermez le fichier.
  5. Avec le bouton droit soit le fichier texte ou l'image bitmap et sélectionnez Propriétés.
  6. Dans la boîte de dialogue Propriétés, recherchez la propriété Action de génération . Par défaut, cette propriété est définie pour le contenu. Cliquez sur la propriété et modifiez la propriété Action de génération en Ressource incorporée.
  7. Répétez les étapes 4 et 5 pour l'autre fichier.
La prochaine fois que vous générez le projet, le compilateur ajoute ces fichiers à votre assembly. Le compilateur ajoute l'espace de noms racine du projet au nom de la ressource lorsqu'elle est incluse dans le projet. Par exemple, si l'espace de noms racine de votre projet est MyNamespace, les ressources sont nommés MyNamespace.MyTextFile.txt et MyNamespace.MyImage.bmp.

Remarque Les noms de fichiers de ressources respectent la casse. Lorsque vous accédez aux ressources, vous devez utiliser l'orthographe exacte et la casse du nom de fichier. Si vous n'utilisez pas l'orthographe exacte et la casse du nom de fichier, l'appel de la méthode pour accéder à la ManifestResourceStream renvoie Nothinget le système ne lève pas d'exception.

Remarque Si vous souhaitez vérifier les noms des ressources, vous pouvez utiliser le Microsoft Intermediate Language Disassembler ILDASM () pour afficher les données de manifeste qui répertorie les ressources inclus.

back to the top

Accès aux ressources

Pour accéder aux ressources que vous avez incorporé dans le manifeste de votre assembly, importez le System.IO et les espaces de noms System.Reflection , comme suit :
   Imports System.IO   Imports System.Reflection				
L'espace de noms System.IO fournit la définition d'un flux de données et l'espace de noms System.Reflection définit la classe de l'Assembly qui fournit des méthodes pour accéder aux ressources qui sont incorporées dans votre assembly.

Lorsque vous déclarez les éléments suivants dans la zone des déclarations générales, les ressources de l'assembly sont lus lorsque le formulaire est chargé :
   Dim _imageStream As Stream   Dim _textStreamReader As StreamReader   Dim _assembly As [Assembly]				
Remarque Pour accéder à l'événement Load du formulaire dans l'éditeur de Code, double-cliquez sur le formulaire dans l'éditeur de conception.

Pour lire la ressource dans l'assembly qui exécute le code en cours, vous devez obtenir une instance de cet assembly. Pour ce faire, utilisez la méthode GetExecutingAssembly de l'assembly, comme suit :
   _assembly = [Assembly].GetExecutingAssembly()				
Lecture des informations de la ressource à un flux de données est exécutée avec un appel de méthode GetManifestResourceStream. Le paramètre passé à cette méthode est le nom de la ressource est accessible. Les deux ressources sont ensuite lus à leurs flux de données correspondant lors de l'exécution de l'événement Load du formulaire.
   _imageStream =  _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp")   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"))				
Le code dans l'événement Load du formulaire ressemble à la suivante :
   Try      _assembly = [Assembly].GetExecutingAssembly()      _imageStream =  _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp")      _textStreamReader = New StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"))   Catch ex As Exception      MessageBox.Show("Resource wasn't found!", "Error")   End Try				
L'instruction Try-Catch , connue comme la gestion structurée des erreurs dans .NET, est utilisée pour détecter les erreurs qui se sont produites pendant que l'instance de la classe Assembly accède aux ressources.

back to the top

Afficher les ressources

Cet exemple utilise deux boutons pour afficher les ressources incorporées. Lorsque vous cliquez sur le premier bouton, une image bitmap qui est basée sur la ressource qui est lu à partir de l'assembly est créée et affichée dans le contrôle PictureBox de l'écran. Le deuxième bouton lit à partir d'une ressource de texte et affiche le texte dans une zone de texte.

Pour afficher les ressources incorporées, procédez comme suit :
  1. Ajoutez un contrôle PictureBox au formulaire.
  2. Ajouter un nouveau contrôle de bouton vers le formulaire et ensuite modifier sa propriété Text pour Afficher l'Image.
  3. Double-cliquez sur le bouton pour ouvrir son événement Click dans la visionneuse de code et contenu de cette événement coller le code suivant :
       Try      PictureBox1.Image = New Bitmap(_imageStream)   Catch ex As Exception      MessageBox.Show("Image Couldn't be created !")   End Try					
    Ce code génère une nouvelle instance d'une bitmap qui est basée sur les flux de theresource qui a été lu dans l'événement Load du formulaire.

  4. Ajoutez un contrôle TextBox au formulaire.
  5. Ajoutez un autre contrôle Button au formulaire et modifiez sa propriété Text pour Obtenir le texte.
  6. Double-cliquez sur le bouton dans l'éditeur de conception pour ouvrir le Click_Event pour le bouton et collez le code suivant dans l'événement :
       Try      If _textStreamReader.Peek() <> -1 Then         TextBox1.Text = _textStreamReader.ReadLine()      End If   Catch ex As Exception      MessageBox.Show("Error reading stream!")   End Try					
    Ce code détermine si les caractères à lire existent toujours dans thestream. Si des caractères sont trouvés, une ligne est lue depuis la zone de texte.
  7. Appuyez sur F5 pour exécuter l'application.
back to the top

Code complet

   Imports System.IO   Imports System.Reflection   Public Class Form1      Inherits System.Windows.Forms.Form   #Region " Windows Form Designer generated code "      Public Sub New()         MyBase.New()         'This call is required by the Windows Form Designer.         InitializeComponent()          'Add any initialization after the InitializeComponent() call.      End Sub      'Form overrides dispose to clean up the component list.      Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)         If disposing Then            If Not (components Is Nothing) Then               components.Dispose()            End If         End If         MyBase.Dispose(disposing)      End Sub      'Required by the Windows Form Designer.      Private components As System.ComponentModel.IContainer       'NOTE: The following procedure is required by the Windows Form Designer.      'It can be modified using the Windows Form Designer.        'Do not modify it using the code editor.      Friend WithEvents Button1 As System.Windows.Forms.Button      Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox      Friend WithEvents Button2 As System.Windows.Forms.Button      Friend WithEvents TextBox1 As System.Windows.Forms.TextBox      <System.Diagnostics.DebuggerStepThrough()> Private Sub  InitializeComponent()         Me.Button1 = New System.Windows.Forms.Button()         Me.PictureBox1 = New System.Windows.Forms.PictureBox()         Me.Button2 = New System.Windows.Forms.Button()         Me.TextBox1 = New System.Windows.Forms.TextBox()         Me.SuspendLayout()         '         'Button1         '         Me.Button1.Location = New System.Drawing.Point(16, 196)         Me.Button1.Name = "Button1"         Me.Button1.TabIndex = 0         Me.Button1.Text = "Show Image"         '         'PictureBox1         '         Me.PictureBox1.Location = New System.Drawing.Point(8, 8)         Me.PictureBox1.Name = "PictureBox1"         Me.PictureBox1.Size = New System.Drawing.Size(280, 184)         Me.PictureBox1.TabIndex = 1         Me.PictureBox1.TabStop = False         '         'Button2         '         Me.Button2.Location = New System.Drawing.Point(16, 232)         Me.Button2.Name = "Button2"         Me.Button2.TabIndex = 2         Me.Button2.Text = "Get Text"         '         'TextBox1         '         Me.TextBox1.Location = New System.Drawing.Point(100, 232)         Me.TextBox1.Name = "TextBox1"         Me.TextBox1.Size = New System.Drawing.Size(176, 20)         Me.TextBox1.TabIndex = 3         Me.TextBox1.Text = "TextBox1"         '         'Form1         '         Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)         Me.ClientSize = New System.Drawing.Size(292, 266)         Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.TextBox1, Me.Button2, Me.PictureBox1, Me.Button1})         Me.Name = "Form1"         Me.Text = "Form1"         Me.ResumeLayout(False)      End Sub   #End Region      Dim _imageStream As Stream      Dim _textStreamReader As StreamReader      Dim _assembly As [Assembly]      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load         Try            _assembly = [Assembly].GetExecutingAssembly()            _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp")            _textStreamReader = New StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"))         Catch ex As Exception            MessageBox.Show("Resource wasn't found!", "Error")         End Try      End Sub      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click         Try            PictureBox1.Image = New Bitmap(_imageStream)         Catch ex As Exception            MessageBox.Show("Image Couldn't be created !")         End Try      End Sub      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click         Try            If _textStreamReader.Peek() <> -1 Then               TextBox1.Text = _textStreamReader.ReadLine()            End If         Catch ex As Exception            MessageBox.Show("Error reading stream!")         End Try      End Sub   End Class				
Remarque Le code doit être modifié dans Visual Basic 2005. Si vous créez un nouveau formulaire est nommé Form1 dans Visual Basic 2005, un fichier nommé Form1.vb est créé pour votre code et un fichier Form1.Designer.vb est créé qui contient la partie automatiquement générée. Le Concepteur Windows Forms utilise le mot clé partial pour diviser l'implémentation de Form1 en deux fichiers distincts. Cela empêche le code émis par le Concepteur d'être entrecoupé par votre code.

Pour plus d'informations sur les nouvelles améliorations du langage Visual Basic 2005, visitez le site Web de Microsoft Developer Network (MSDN) à l'adresse suivante :
Pour plus d'informations sur les classes partielles et le Concepteur Windows Forms, reportez-vous au site Web MSDN suivant :back to the top

Résolution des problèmes

Étant donné que les noms de ressources respectent la casse, vérifiez que vous utilisez l'orthographe et la casse des ressources qui sont accessibles. Vous pouvez utiliser l'outil ILDASM pour lire les données de manifeste pour vérifier l'orthographe exacte des ressources.

back to the top
Références
Pour plus d'informations, consultez les sites Web de Microsoft Developer Network (MSDN) suivant : back to the top

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 319291 - Dernière mise à jour : 06/21/2015 01:31:00 - Révision : 3.0

Microsoft Visual Basic .NET 2002 Initiation, Microsoft Visual Basic .NET 2003 Initiation, Microsoft Visual Basic 2005

  • kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB319291 KbMtfr
Commentaires