none
Tableaux appelés dans plusieurs procédure RRS feed

Réponses

  • Utilisez alors "System" au lieu de "SystemX86" ce qui fera la liste des fichiers dans le dossier "système" de Windows ou utiliser directement le dossier qui vous intéresse à la place de GetFolderPath (je suis sous .NET 4 avec un Windows 64 bits).
    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse papyx samedi 20 août 2011 15:01
    samedi 20 août 2011 12:00
    Modérateur

Toutes les réponses

  • Bonjour,

     

    C'est quoi la question ?

    jeudi 18 août 2011 10:07
    Auteur de réponse
  • bonjour

    je voudrai utiliser 2 tableaux que j'ai déclaré public, dans des procédures:

    1) raz des tableaux

    2) chargement depuis un répertoire

    3) lecture de ceux-ci pour charger une Lisbox 

    voila un extrait de mon code:

    Imports System

    Imports System.IO

     

    Public Class tbl

        Public Shared tf(300) As String

        Public Shared te(300) As String

    End Class

    Public Class Form2

        Dim file As String

        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            file = "nouveau document.txt"

        End Sub

    #Region "FolderBrowserDialog"

        Private Sub B_Rep_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_rep.Click

            Erase tbl.tf, tbl.te

            tbl.tf(1) = new "wxcvd"

    jeudi 18 août 2011 11:19
  • Bonjour,

     

    Est t-il possible de poster la totalité du code ou sinon celle du code de la classe Form2 car j'ai du mal à tirer quoi que ce soit avec le code posté.

    jeudi 18 août 2011 12:23
    Auteur de réponse
  • j'ai mis le code dans :  http://cjoint.com/?AHsrTOPSSoW

     

    l’erreur se produit au moment de l'exécution sur l'instruction avec le repère "==>"

    jeudi 18 août 2011 15:49
  • Bonjour,

     

    Bien que je ne connais pas du tout le vb, je vois que tes tableaux tbl.tf et tbl.te n'ont jamais étaient initialisés, il sont restaient à NoTthing et même si ça avaient était le cas l'instruction Erase les remet à NoThing.

     

    Solution :

    Mettre les lignes de code suivant juste avant la ligne avec le repère "==>" :

    tbl.tf = New String(300) {}

    tbl.te = New String(300) {}

     

    Bon courage.

    jeudi 18 août 2011 16:33
    Auteur de réponse
  • Bonjour,

    Cf la réponse de eouldmourad. Plus généralement l'exception System.NullReferenceException indique que l'on essaie de travailler avec un objet qui n'a pas été initialisé. Donc lorsque l'erreur survient, il faut examiner toutes les variables présentes sur la ligne concernée pour trouver laquelle n'a pas été initialisée (et est donc à Nothing).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    jeudi 18 août 2011 18:20
    Modérateur
  • bonjour

    quelqu'un pourrait-il me dire ou trouver un exemple de tableaux qui sont utilisés dans différentes procédures?

    Comment les initialiser (à blanc) et les charger?

    AD

    vendredi 19 août 2011 09:41
  • j'avais déjà vu ceux-ci et je ne suis pas plus avancé.
    vendredi 19 août 2011 15:27
  • Si je comprends bien ce que vous voulez faire peut-être qq chose comme :

    Option Strict On
    
    Imports System.Runtime.CompilerServices
    
    Public Class Form1
    
      Public Fichiers As New List(Of String)
    
      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        For Each Fichier In New System.IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.SystemX86)).GetFiles
          Fichiers.Add(Fichier.Name)
        Next
        ListBox1.Items.AddRange(Fichiers.ToArray)
      End Sub
    End Class
    


    qui va afficher les fichiers du dossier système de Windows dans une listbox. J'ai utilisé une liste plutôt qu'un tableau car un tableau est de taille fixe et est donc adapté lorsqu'on connait à l'avance le nombre d'éléments. Ici je préfère ajouter les éléments les uns après les autres dans la liste et convertir la liste en tableau (ToArray) au moment d'ajouter tous les éléments d'un coup dans la listbox avec AddRange.

    Si on veut vraiment utiliser un tableau cela pourrait donner qq chose comme :

    Option Strict On
    
    Imports System.Runtime.CompilerServices
    
    Public Class Form1
    
      Public Fichiers() As String
    
      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim Dossier As New IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.SystemX86))
        ReDim Fichiers(Dossier.GetFiles.Count - 1)
        Dim index As Integer = 0
        For Each fichier As IO.FileInfo In Dossier.GetFiles
          Fichiers(index) = fichier.Name
          index += 1
        Next
        ListBox1.Items.AddRange(Fichiers)
      End Sub
    End Class
    
    Dans le code original le problème est que Erase efface le tableau (au lieu de mettre ces éléments à vide c'est le tableau lui-même qui n'existe plus). Il faudrait donc l'initialiser plutôt avec Redim qui permet de le réinitialiser avec le nombre d'éléments voulus.

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 19 août 2011 20:28
    Modérateur
  • Bonjour patrice

    je crois que vous me donnez une solution intéressante.

    Je bloque sur la lecture des fichiers : "systemX86" n'est pas reconnu.

    Je rappelle que je suis en vb2008 sous XP/SP3.


    samedi 20 août 2011 07:58
  • Utilisez alors "System" au lieu de "SystemX86" ce qui fera la liste des fichiers dans le dossier "système" de Windows ou utiliser directement le dossier qui vous intéresse à la place de GetFolderPath (je suis sous .NET 4 avec un Windows 64 bits).
    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse papyx samedi 20 août 2011 15:01
    samedi 20 août 2011 12:00
    Modérateur
  • J'ai essayé avec "System" mais j'obtiens les fichiers de windows; alors que j'ai un "PAth" mais je ne sais pas m'en servir dans ce cas de figure.

     

    Rectif.  ca fonctionne; merci

    samedi 20 août 2011 12:30