Bonjour,
Est-ce possible de Binder la propriété .Text d'un contrôle sur une propriété paramétrée d'une classe? De quelle façon?
Merci d'avance.
Version imprimable
Bonjour,
Est-ce possible de Binder la propriété .Text d'un contrôle sur une propriété paramétrée d'une classe? De quelle façon?
Merci d'avance.
Pour être plus clair, je cherche à faire quelque chose qui ressemblerait à:
Code:Me.TextBox1.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.MyBindingSource, "MaPropriete(0)", True))
Code:Me.TextBox2.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.MyBindingSource, "MaPropriete(1)", True))
si ca ne marche pas avec ta syntaxe, essaye mapropriété[0] au lieu de (0)
j'ai réussi avec une syntaxe dans le genre en wpf, je ne sais pas si ca fonctionne en windows forms ...
J'ignorais qu'il était possible de passer des paramètres sur des propriétés.
Et je ne parle pas de propriétés renvoyant une liste dont on désire prendre l'élément à un position précise.
Autrement pour répondre à la question.
Pour faire du binding sur des propriétés renvoyant des tableaux, list, etc. Il faut se renseigner sur le concept de complex binding sauf erreur.
Pour faire du binding sur un element précis d'une propriété envoyant une liste il est toujours possible de créer une deuxième propriété qui renvoit l'element X de la première.
Néanmoins ceci est possible uniquement pour des cas comme premier élément, le plus grand élément, etc.
Ca peut résoudre ton problème sauf si tu veux un paramètre dynamique sur ton binding.
pourtant il y en a partout dans le framework
controls est une propriété et on lui passe un paramètre ...Code:me.controls("textbox1")
une propriété paramétrée s'écrit comme une méthode paramétré :une propriété n'est en fait qu'une fonction get et une sub setCode:public property nom (a as string, b as integer) as object
Pol63, ça ne fonctionne pas, erreur au lancement de l'application.
sinople, j'avais commencé à créer des deuxièmes propriétés mais là l'application a évoluée et je devrais créer environ 200 nouvelles propriétés, ce qui n'a aucun bon sens.
EDIT: Dynamique... En fait, un contrôle sera toujours bindé au même index.
D'autres suggestions?
Dans ma propriété bindée, est-ce possible de savoir qu'elle contrôle est l'appelant dans le cas où tous mes contrôles seraient bindés à cette même propriété?
EDIT: Mon index vient d'une propriété étendue de mon contrôle. Donc, si je récupère mon contrôle, je récupère mon index et retourne la valeur en conséquence.
pourquoi as tu besoin d'une propriété indexée ?
on pourrait en savoir un peu plus sur ton code ?
car vu le peu de réponse sur les propriété indexée bindée, je ne pense pas qu'il soit simple de trouver quel controle demande le binding ...
J'ai trouvé un code source qui semble être une solution à mon problème:
http://www.codeproject.com/script/Ar...aspx?aid=19275
Je vais tester la solution proposée et vous tiens au courant.
Ça marche nickel comme vous dites ;)
Voici la classe:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 Imports System.Reflection ' Allow binding of controls to indexed properties. Public Class BindingMap ' Keep track of our target object and the parameters ' that we want to bind to. Private _mappedObject As Object Private _mappedProperty As String Private _mappedIndexVal As Object Public Sub New(ByVal MappedObject As Object, _ ByVal PropertyName As String, _ ByVal IndexValue As Object) _mappedObject = MappedObject _mappedProperty = PropertyName _mappedIndexVal = IndexValue End Sub ' Provide a non-indexed property for our binding map object. ' This will act as the intermediary between the control and ' the target object's indexed property. Public Property MapValue As Object Get If _mappedObject IsNot Nothing Then Dim pi As PropertyInfo = _mappedObject.GetType.GetProperty(_mappedProperty) Dim mi As MethodInfo = pi.GetGetMethod() Return mi.Invoke(_mappedObject, New Object() {_mappedIndexVal}) End If Return Nothing End Get Set(ByVal Value As Object) If Me._mappedObject IsNot Nothing Then Dim pi As PropertyInfo = _mappedObject.GetType.GetProperty(_mappedProperty) Dim mi As MethodInfo = pi.GetSetMethod() mi.Invoke(_mappedObject, New Object() {_mappedIndexVal, Value}) End If End Set End Property End Class
On l'appelle de cette façon:
Code:
1
2
3
4
5
6
7 ' property you want to map to your control. dim m as BindingMap = _ new BindingMap(MyObject, "PropertyName", PropertyIndex) ' Now point the control data binding at the binding map... b = new Binding("Text", m, "MapValue") control.DataBindings.Add(b)