Ceci est probablement un simple mais je n'arrive pas à le comprendre.InvokeMember à l'aide de GetField. Champ non trouvé dans VB.NET
J'ai un tas d'éléments de formulaire créés par le concepteur de forme déclarée (en frmAquRun.Designer.vb)
Public WithEvents btnAquRunEvent1 As VisibiltyButtonLib.VisibilityButton
Public WithEvents btnAquRunEvent2 As VisibiltyButtonLib.VisibilityButton
... etc
Et je veux essentiellement être en mesure de fournir un nombre à une fonction accède à chacun de ces champs. J'ai donc écrit cette fonction. (en frmAquRun.vb)
Const EVENT_BUTTON_PREFIX As String = "btnAquRunEvent"
Public Function getEventButton(ByVal id As Integer) As Windows.Forms.Button
Dim returnButton As Windows.Forms.Button = Nothing
Try
returnButton = DirectCast(Me.GetType().InvokeMember(eventButtonName, Reflection.BindingFlags.GetField Or Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance, Nothing, Me, Nothing), Windows.Forms.Button)
Catch ex As Exception
End Try
Return returnButton
End Function
Mais il semble toujours générer des exceptions de champ non trouvées. Le message de l'exception est "Champ" ATSIS_ControlProgram.frmAquRun.btnAquRunEvent1 "introuvable.".
L'espace de noms et le nom de formulaire dans le message sont corrects. Une idée de ce que je fais mal?
Merci, en définissant le bindingFlags à GetProperty a fait l'affaire. Je ne connaissais pas l'objet Contrôles dans le formulaire Je le garderai à l'esprit pour référence future, mais les boutons d'événements sont dans des conteneurs différents, ce qui rendrait les choses un peu compliquées. – Isaiah