OVH Cloud OVH Cloud

Comment trouver par programmation le nom d'une propriété ?

3 réponses
Avatar
Gilbert Tordeur
Bonjour.

Contexte : VB2008.

Soit une classe C1 affichant une propriété publique P1.

À partir du code C1.P1 ou similaire, je voudrais récupérer le nom de la
propriété : "P1". Ceci par exemple pour renseigner un DisplayMember d'une
Listbox, ou toute autre chose. De sorte que si l'on renomme un jour P1 en
P2, mon DisplayMember deviendra automatiquement "P2".

Je devine qu'il faut utiliser System.Reflection, mais c'est un tel fouillis
que je ne m'y retrouve pas.

Merci de votre aide,
Gilbert

3 réponses

Avatar
eric.delot
Bonjour,
je crois que ceci devrait faire l'affaire :
System.Reflection.MethodBase.GetCurrentMethod.Name
(a voir ...)

Cordialement,
Eric.


"Gilbert Tordeur" a écrit dans le message de
news:
Bonjour.

Contexte : VB2008.

Soit une classe C1 affichant une propriété publique P1.

À partir du code C1.P1 ou similaire, je voudrais récupérer le nom de la
propriété : "P1". Ceci par exemple pour renseigner un DisplayMember d'une
Listbox, ou toute autre chose. De sorte que si l'on renomme un jour P1 en
P2, mon DisplayMember deviendra automatiquement "P2".

Je devine qu'il faut utiliser System.Reflection, mais c'est un tel
fouillis que je ne m'y retrouve pas.

Merci de votre aide,
Gilbert



Avatar
Gilbert Tordeur
Impeccable Éric ! Merci beaucoup.

Pour ceux que ça intéresse, voici un exemple (dépouillé) de mise en oeuvre :

La classe :
Imports System.Reflection

Public Class CjcCustomer
Private CustomerIDPropertyName As String
Private CustomerNamePropertyName As String
Private m_CustomerID As Integer
Private m_CustomerName As String

Public Property CustomerName() As String
Get
If String.IsNullOrEmpty(CustomerNamePropertyName) Then
CustomerNamePropertyName =
MethodBase.GetCurrentMethod.Name.Substring(4)
End If
Return m_CustomerName
End Get
Set...
End Property

Public Property CustomerID() As Integer
Get
If String.IsNullOrEmpty(CustomerIDPropertyName) Then
CustomerIDPropertyName =
MethodBase.GetCurrentMethod.Name.Substring(4)
End If
Return m_CustomerID
End Get
Set...
End Property

Public Sub New()
Dim x1 = Me.CustomerName ' to fill CustomerNamePropertyName
Dim x2 = Me.CustomerID ' to fill CustomerIDPropertyName
End Sub

Public Function GetDisplayName() As String
Return CustomerNamePropertyName
End Function

Public Function GetValueName() As String
Return CustomerIDPropertyName
End Function
End Class

Le code pour garnir une ListBox :

' Soit LstClient As List(Of CjcCustomer), qui contient au moins un élément

MaListBox.DisplayMember = LstClient.GetDisplayName
MaListBox.ValueMember = LstClient.GetValueName
MaListBox.DataSource = LstClient

Gilbert
Avatar
Gilbert Tordeur
Une toute petite correction en bas (faute de frappe) :
MaListBox.DisplayMember = LstClient(0).GetDisplayName
MaListBox.ValueMember = LstClient(0).GetValueName

Soit l'exemple complet :

La classe :
Imports System.Reflection

Public Class CjcCustomer
Private CustomerIDPropertyName As String
Private CustomerNamePropertyName As String
Private m_CustomerID As Integer
Private m_CustomerName As String

Public Property CustomerName() As String
Get
If String.IsNullOrEmpty(CustomerNamePropertyName) Then
CustomerNamePropertyName MethodBase.GetCurrentMethod.Name.Substring(4)
End If
Return m_CustomerName
End Get
Set...
End Property

Public Property CustomerID() As Integer
Get
If String.IsNullOrEmpty(CustomerIDPropertyName) Then
CustomerIDPropertyName MethodBase.GetCurrentMethod.Name.Substring(4)
End If
Return m_CustomerID
End Get
Set...
End Property

Public Sub New()
Dim x1 = Me.CustomerName ' to fill CustomerNamePropertyName
Dim x2 = Me.CustomerID ' to fill CustomerIDPropertyName
End Sub

Public Function GetDisplayName() As String
Return CustomerNamePropertyName
End Function

Public Function GetValueName() As String
Return CustomerIDPropertyName
End Function
End Class

Le code pour garnir une ListBox :

' Soit LstClient As List(Of CjcCustomer), qui contient au moins un élément

MaListBox.DisplayMember = LstClient(0).GetDisplayName
MaListBox.ValueMember = LstClient(0).GetValueName
MaListBox.DataSource = LstClient

Gilbert