Comment remplacer correctement TYPE du Vb6 sous VB.NET ? [Résolu]

Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 24 déc. 2010 à 15:06 - Dernière réponse : Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention
- 25 déc. 2010 à 13:46
Salut à tous;

Je me mélange les pinceaux avec les portées !

Mon soucis:
Je n'arrive pas a voir mes fonctions dans clsFindInfos tout en voulant
garder hors de portées ma structure HexArray et ma déclaration myHex().

Mon souhait:
(exemple dans un bouton)
Dim myFind As New clsHexa.FindInfos.HexArray

myFind.OpenAdd("0F","FIRST")
myFind.OpenAdd("B8","LAST")
'procédures diverses
'...

'Test
Debug.Print("NB ELEMENT: " & myFind.Count())
'Liberation du tableau
myFind.Close()


Mon code:
    Public Class FindInfos
        Structure HexArray
            Dim ChaineHexa As String
            Dim FindMethod As String
        End Structure
        Shared myHex() As HexArray = Nothing
        Public Shared Sub OpenAdd(ByVal ChaineHexa As String, ByVal FindMethod As String)
            If myHex Is Nothing Then
                ReDim myHex(0)
            Else
                ReDim Preserve myHex(myHex.Length)
            End If
            myHex(myHex.Length).ChaineHexa = ChaineHexa
            myHex(myHex.Length).FindMethod = FindMethod
        End Sub
        Public Shared Function Count() As Integer
            If myHex Is Nothing Then
                Return Nothing
            Else
                Return myHex.Length
            End If
        End Function
        Public Shared Sub Close()
            myHex = Nothing
        End Sub
    End Class
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
NHenry 14182 Messages postés vendredi 14 mars 2003Date d'inscription 25 mai 2018 Dernière intervention - 24 déc. 2010 à 22:08
3
Merci
Bonjour,

Si tes fonction prennent en paramètre ou retourne un type (structure, enum, classe, ...), il faut que l'éventuel appelant y ait accès (minimum), pour faire simple :
- Fonction publique, type publique
- Fonction Friend, Type Friend
- Fonction Private, Type Private (là, personne ne voit rien sauf le conteneur)
- Fonction Protected, Type Protected

Rappel simplifié :
Private < Protected < Friend < Public

Attention, Si tu déclare un élément public dans une classe Friend,, l'élément sera Friend.
L'élément est automatiquement <= en visibilité rapport à son conteneur.

Petite subtilité :
Classe/Structure Private/Protected dans une Classe/Structure, quelque soit la visibilité du conteneur, le contenu sera au plus visible seulement (Public/Friend) dans le conteneur.

Mon site

Merci NHenry 3

codes-sources a aidé 81 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 25 déc. 2010 à 10:08
3
Merci
salut,


Public Class FindInfos
Structure HexArray

Dim myFind As New clsHexa.FindInfos.HexArray

myFind.OpenAdd("0F","FIRST")


normal que tu ne puisses pas "voir" OpenAdd, c'est une méthode de FindInfos et non de HexArray : rien à voir avec la portée

Dim myFind As New (clsHexa.)FindInfos.HexArray


maintenant tu ne veux pas "partager" ta structure donc :
*déclare-la private
*utilise une list OF plutôt qu'un tableau à redimensionner
*profite alors du constructeur qu'offre une classe au lieu d'une structure

Public Class FindInfos

    Private Class HexItem
        Public ChaineHexa As String
        Public FindMethod As String
        Public Sub New(ByVal sChaineHexa As String, ByVal sFindMethod As String)
            Me.ChaineHexa = sChaineHexa
            Me.FindMethod = sFindMethod
        End Sub
    End Class

    Private myHex As New List(Of HexItem)

    Public Sub OpenAdd(ByVal ChaineHexa As String, ByVal FindMethod As String)
        myHex.Add(New HexItem(ChaineHexa, FindMethod))
    End Sub
    Public Function Count() As Integer
        Return myHex.Count
    End Function
    Public Sub Close()
        myHex.Clear()
        myHex = Nothing
    End Sub

End Class



et enfin :

Dim myFind As New clsHexa.FindInfos.HexArray
Dim myFind As New FindInfos

'...

Debug.Print("NB ELEMENT: " & myFind.Count())
Console.WriteLine("NB ELEMENT: {0}", myFind.Count())


++

[hr]

Merci PCPT 3

codes-sources a aidé 81 internautes ce mois-ci

Commenter la réponse de PCPT
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 25 déc. 2010 à 13:46
0
Merci
Merci Henry pour ce cours instructif, un vrai régal ^^

Merci PCPT pour l'exemple logique, un vrai bonheur ^^

Joyeuses fêtes, cher membres.
Commenter la réponse de Duke49

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.