IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Conseils - Faire varier des valeurs de propriété.


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut Conseils - Faire varier des valeurs de propriété.
    Bonjour à tous,

    J'ai un objet voiture avec des propriétés : RaideurRessort_AvDroit, RaideurBarreAntiRoulis...etc...

    Une méthode qui calcule la balance de la voiture (+/- sur-vireur).

    Pour que l'utilisateur connaisse l'influence (importante ou non) des réglages (propriété ressort ou pneu...) sur la balance de la voiture, j'ai sur mon form, une serie de checkbox qui désigne chacune une pièce (pneu ArGauche, ...)

    L'utilisateur selectionne les pièce dont il veut connaitre l'influence puis click sur un bouton et apparait autant de graph qu'il à selectioné de pièce avec en X le réglage de la pièce (de + en + raid pour un ressort), et en Y la balance de l'auto.


    Je cherche un moyen élégant pour que la checkbox renseigne une propriété de l'auto sans faire 3km de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if RessortAvantDroit_checkbox.Checked = True then
     
    For i = 10 to 100
    Voiture.RessortAvantDroit=i
    call PlotBalance(i)
    Next
     
    end if 
     
    if RessortAvantchauche_checkbox.Checked = True then
     
    ...
    ...
    Pouvez vous m'indiquer une stratégie pour faire quelque chose de simple et concis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim partName As String
     
            For Each control As Control In PartSetupChange_box.Controls
     
                If TypeOf control Is CheckBox Then
     
                    If DirectCast(control, CheckBox).Checked = True Then
     
    'Toutes les checkbox s'appel RessortAvantDroit_cbox, je vire _cbox et j'ai le nom de la propriété
                        partName = (control.Name).Remove((control.Name.Length) - 5)
     
     
                    End If
     
                End If
     
            Next
    Mal barré çà...

    En utilisant un dictionnaire (CheckBox, double) peut être?

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Bonjour. SI c'est avec WinForms, il existe une propriété Tag sur chaque contrôle qui permet d'y associer un objet de données (identifiant, business objet représenté, etc). C'est une propriété sans effet particulier, elle est simplement fournie aux développeurs pour éviter d'avoir un dictionnaire comme celui auquel tu songeais.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Bonjour. SI c'est avec WinForms, il existe une propriété Tag sur chaque contrôle qui permet d'y associer un objet de données (identifiant, business objet représenté, etc). C'est une propriété sans effet particulier, elle est simplement fournie aux développeurs pour éviter d'avoir un dictionnaire comme celui auquel tu songeais.
    Remarks

    Any type derived from the Object class can be assigned to this property. If the Tag property is set through the Windows Forms designer, only text can be assigned.

    A common use for the Tag property is to store data that is closely associated with the control. For example, if you have a control that displays information about a customer, you might store a DataSet that contains the customer's order history in that control's Tag property so the data can be accessed quickly.
    Examples

    The following code example displays a form and stores a Customer in its Tag property. This example requires that you have defined a class that derives from Form named CustomerForm and that you have defined a Customer.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub buttonNewCustomer_Click(sender As Object, _
      e As EventArgs) Handles buttonNewCustomer.Click
       ' Create a new customer form and assign a new 
       ' Customer object to the Tag property. 
       Dim customerForm As New CustomerForm()
       customerForm.Tag = New Customer()
       customerForm.Show()
    End Sub
    Je connais le binding, mais là je comprend pas bien à quoi çà sert...

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    L'avantage est le suivant : faire une seule boucle foreach qui parcourt les checkbox. A chaque itération, on récupère via Tag la pièce (index, chaîne, couple de délégués getter/setter) correspondant à la checkbox courante.

    Par exemple :
    * A la création du contrôle on associe au tag de chaque checkbox le setter lui correspondant checkboxAvantGauche.Tag = (Action<Voiture,int>)(voiture, i) => voiture.RessortAvantGauche = i;
    * Pour mettre à jour l'affichage en fonction des cases sélectionnées, on énumère toutes les checkboxes et, pour chacune, on utilise la même boucle en exploitant le setter associé à la checkbox via tag.

    PS : Oui l'exemple est en C# et nous sommes dans la section VB, désolé.

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut Factoriser la selection par checkbox
    bonjour gualino
    A priori tu cherches à factoriser les etats checked des checkbox.
    A un certain niveau de complexite de l'application cela est absolument necessaire,de la decomposer en 'facteur premier simple'.
    La methode suggere par DonQuiche utilisant le champ Tag du Checkbox qui peut contenir un objet (un class ou dans ton cas l'objet propriete RessorX de la classe Voiture) est la plus simple et la plus eprouve qui existe à ce jour quand on a une foultitude de CheckBoxet autres RadioButtons.
    Les seules precautions à prendre sont :
    1/d'abord utiliser une liste des controles concernes.
    -charger la liste avec les controles concernes à l'initialisation du form pour avoir une meilleure rapidite (au lieu de boucler sur Me.Form.controls de maniere repetitive).
    2/Tenir compte d'une difficulte sous-jacente qui surgit à propos du contenu de Tag qui doit etre mis à jour lorsque on change d'instance de voiture.
    -pour ce faire il faut d'abord binder Tag du Class CheckBox à prop voiture concernee(RessortX ou CremaillereX) du Class Voiture(mecanisme de Notification simple implemente dans Class Voiture).
    -quand on change d'instance voiture faire un RAZ du binding pour tenir compte de cet etat de fait.
    Ces 2 conditions vues de plus pres montrent qu'il faut factoriser une seule sub qui fait le binding et maj.
    Le fonctionnement reste simple:
    -parcours de la liste des checkbox et recherche des "checkes"
    -pour chaque checkbox "checke" recuperer la valeur de l'objet Tag(eh oui Tag est un vrai fourre-tout) et changer sa valeur ou l'envoyer au moulin tel quel (le plotter dans ton cas)........
    Bref voici un bout code qui dira mieux ce que je veux entendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
     
    'classe Voiture
    'needed pour implementer la notification lors des changements 
    'des valeurs de propriete de la classe voiture pour avertir CheckBox
    Imports System.ComponentModel
     
    Public Class Voiture
    	Implements INotifyPropertyChanged
    	Private m_Marque As String
    	Public Sub New()
    	End Sub
    	Public Property Marque() As String
    		Get
    			Return m_Marque
    		End Get
    		Set(ByVal value As String)
    			m_Marque = value
    			NotifyPropertyChanged("Marque")
    		End Set
    	End Property
    	Private m_RessortAvantDroit As Integer
    	Public Property RessortAvantDroit() As Integer
    		Get
    			Return m_RessortAvantDroit
    		End Get
    		Set(ByVal value As Integer)
    			m_RessortAvantDroit = value
    			NotifyPropertyChanged("RessortAvantDroit")
    		End Set
    	End Property
    	Private m_RessortArriereDroit As Integer
    	Public Property RessortArriereDroit() As Integer
    		Get
    			Return m_RessortArriereDroit
    		End Get
    		Set(ByVal value As Integer)
    			m_RessortArriereDroit = value
    			NotifyPropertyChanged("RessortArriereDroit")
    		End Set
    	End Property
     
     
    	Private m_RessortAvantGauche As Integer
    	Public Property RessortAvantGauche() As Integer
    		Get
    			Return m_RessortAvantGauche
    		End Get
    		Set(ByVal value As Integer)
    			m_RessortAvantGauche = value
    			NotifyPropertyChanged("RessortAvantGauche")
    		End Set
    	End Property
    	Private m_RessortArriereGauche As Integer
    	Public Property RessortArriereGauche() As Integer
    		Get
    			Return m_RessortArriereGauche
    		End Get
    		Set(ByVal value As Integer)
    			m_RessortArriereGauche = value
    			NotifyPropertyChanged("RessortArriereGauche")
    		End Set
    	End Property
    	Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
    	Private Sub NotifyPropertyChanged(ByVal s As String)
    		RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(s))
    	End Sub
     
    End Class
     
    'Forme exemple
    'NB: le DataGridView a ete rajpute simplement pour voir le 
    '"binding" en action dans les 2 sens
    'NB :pour tester le "Plot"  
    '-il faut "filler" la liste de voiture d'abord
    '-Choisir une instance voiture par Marque dans ComboBox
    '-Cocher un checkbox ou plusieurs
    '-Plotter .le resultat se trouve dans le TextBox
    Imports System
    Public Class Form1
    	Private myVoiture As Voiture
    	Private lstVoitures As List(Of Voiture)
    	Private lstCheckBox As List(Of CheckBox)
    	Private selectedVoiture As Voiture = Nothing
     
    	Public Sub New()
    		' Cet appel est requis par le Concepteur Windows Form.
    		InitializeComponent()
     
    		' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
    	End Sub
    	Private Sub btnFillVoitures_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFillVoitures.Click
    		'Raz
    		Me.lstCheckBox = Nothing
    		Me.lstVoitures = Nothing
    		Me.cboSelectVoiture.Items.Clear()
     
    		'Initialise une liste voitures
    		Me.lstVoitures = New List(Of Voiture)
    		Dim rnd As Random = New Random
    		For i As Integer = 0 To 19
    			Me.myVoiture = New Voiture
    			Me.myVoiture.Marque = "Marque" & (i + 1).ToString
    			Me.myVoiture.RessortArriereDroit = rnd.Next(10, 20)
    			Me.myVoiture.RessortArriereGauche = rnd.Next(30, 40)
    			Me.myVoiture.RessortAvantDroit = rnd.Next(50, 60)
    			Me.myVoiture.RessortAvantGauche = rnd.Next(70, 80)
    			Me.lstVoitures.Add(myVoiture)
    			Me.cboSelectVoiture.Items.Add(Me.myVoiture)
    		Next
    		Me.cboSelectVoiture.DisplayMember = "Marque"
     
    		' Factorise  les checkboxes concernes 
    		' les mets dans lstCheckBox
    		Me.lstCheckBox = New List(Of CheckBox)
    		GetCheckBoxes()
    		'un datagridview (pour illustration) permet de mieux visualiser cet etat de fait
    		Me.DataGridView1.AllowUserToAddRows = False
    		Me.DataGridView1.AllowUserToDeleteRows = False
    		Me.DataGridView1.AllowUserToOrderColumns = True
    		Me.DataGridView1.DataSource = Me.lstCheckBox
     
    	End Sub
    	Private Sub GetCheckBoxes()
    		Me.lstCheckBox.Clear()
    		Me.lstCheckBox = New List(Of CheckBox)
    		For Each ctrl As Control In Me.Controls
    			If TypeOf (ctrl) Is CheckBox Then
    				Dim chk As CheckBox = CType(ctrl, CheckBox)
    				chk.Checked = False
     
    				Me.lstCheckBox.Add(ctrl)
    			End If
    		Next
    	End Sub
    	'Boucle sur les CheckBox pour plotter ceux qui sont "checkes" et 
    	Private Sub btnPlot_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlot.Click
    		If Me.lstVoitures Is Nothing Then
    			Me.txtDisplayPlot.Text = "Nothing to plot"
    			Return 'pas de voiture
    		End If
    		Me.txtDisplayPlot.Clear()
    		For Each ctrl As CheckBox In Me.lstCheckBox
    			If ctrl.Checked Then
    				Me.checkPlot(ctrl.Tag)
    			End If
    		Next
    	End Sub
    	'checkPlot imprime  la valeur du Tag 
    	Private Sub checkPlot(ByVal objTag As Object)
    		If TypeOf (objTag) Is Integer Then
    			For i = 10 To 100
    				objTag = i
    				Call PlotBalance(i)
    			Next
     
    		ElseIf TypeOf (objTag) Is String Then
    			Call PlotMarque(objTag)
    		End If
    	End Sub
    	'PlotBalance  si integer
    	Private Sub PlotBalance(ByVal i As Integer)
    		Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & i.ToString & vbCrLf
    	End Sub
    	'PlotMarque  si string(pour illustrer l'efficience de la methode)
    	Private Sub PlotMarque(ByVal objTag As Object)
    		Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & objTag & vbCrLf
    	End Sub
    	' met à jour le binding du Tag du Checkbox si l'objet courant  voiture
    	' change
    	Private Sub cboSelectVoiture_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboSelectVoiture.SelectedIndexChanged
    		selectedVoiture = CType(cboSelectVoiture.SelectedItem, Voiture)
    		If selectedVoiture Is Nothing Then Return
     
    		'binde !
    		BindCurrentVoitureToCheckBox(selectedVoiture)
     
    	End Sub
    	Private Sub BindCurrentVoitureToCheckBox(ByVal objVoiture As Voiture)
    		'Clear databinding precedent
    		For Each ctrl As CheckBox In Me.lstCheckBox
    			ctrl.DataBindings.Clear()
    		Next
    		'binde  prop "Tag" du checkbox => à prop  corresp. de instance voiture
    		For Each ctrl As CheckBox In Me.lstCheckBox
    			Select Case ctrl.Name
    				Case "chkRessortArriereDroit"
    					ctrl.DataBindings.Add("Tag", objVoiture, "RessortArriereDroit")
    					ctrl.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged
    				Case "chkRessortAvantDroit"
    					ctrl.DataBindings.Add("Tag", objVoiture, "RessortAvantDroit")
    				Case "chkArriereGauche"
    					ctrl.DataBindings.Add("Tag", objVoiture, "RessortArriereGauche")
    				Case "chkRessortAvantGauche"
    					ctrl.DataBindings.Add("Tag", objVoiture, "RessortAvantGauche")
    				Case "chkMarque"
    					ctrl.DataBindings.Add("Tag", objVoiture, "Marque")
    			End Select
    			ctrl.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged
    		Next
    	End Sub
     
    End Class
    Bon code.............

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Merci MABROUKI,

    Je m'y repenche dès que possible.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Merci beaucoup pour cette démonstration...

    Je suis loin d'avoir autant d'aisance dans le code.

    J'ai lu attentivement, le code, j'ai compris, mais j'ai quelque question:

    Dans le constructeur du form vous utilisez InitializeComponent...moi je n'utilise pour le form, ni constructructeur ni cette methode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub New()
    		' Cet appel est requis par le Concepteur Windows Form.
    		InitializeComponent()
     
    		' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
    	End Sub
    The call to InitializeComponent() (which is usually called in the default constructor of at least Window and UserControls) is actually a method call to the partial class of the control (rather than a call up the object hierarchy as I first expected).

    This method locates a URI to the XAML for the Window/UserControl that is loading, and passes it to the System.Windows.Application.LoadComponent() static method. LoadComponent() loads the XAML file that is located at the passed in URI, and converts it to an instance of the object that is specified by the root element of the XAML file.
    .....concrètement çà sert à quoi?

    Et pourquoi un constructeur vide dans la classe voiture?
    Il me semble qu'à l'instanciation la classe en question est lu...même sans le constructeur...Alors est ce par habitude ou pour faire plus propre/logique comme quand on utilise encore le mot clef "Call" ?


    En cherchant un peut j'ai lu "retour charriot", un truc qui date des machines a écrire...

    Je cherche a arrondir des valeur de serie de chart apparaissant dans les tooltip:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Series(0).ToolTip = "Slip Angle= #VALXdeg" & vbNewLine & "Fy0= #VALYN" & vbNewLine & "Fz= 1000N"
    y a t il une méthode pour le format d'affichage du tooltip?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "chkRessortArriereDroit"
    A quoi sert 'chk'?


    Merci beaucoup pour votre aide.

    Par curiosité en combien de temps avez vous fait ces 200 lignes?

  8. #8
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut champ tag
    Rebonjour Gualino

    Pour :
    Dans le constructeur du form vous utilisez InitializeComponent...moi je n'utilise pour le form, ni constructructeur ni cette methode.
    Par bonne habitude.
    Si tu as des controles à creer par code c'est un passage oblige ce Sub New.
    C'est apres InitializeComponent() que tu peux rajouter du code pour mettre au point tes controles existants (proprietes) et meme creer par code d'autres controles eventuellement...(en vb.net le code est genere pour toi gratis dans le fichier form.designer.vb cache pour tout ce qui touche aux controles droppes).

    Et pourquoi un constructeur vide dans la classe voiture?
    Ben je suppose que ta classe voiture a des proprietes et les variables membres des proprietes doivent etre initialises dans Sub New sans quoi à l'execution on peut avoir des surprises (par exemple diviser ou multiplier par une propriete numerique non initialise correctement).....

    contanste vbCrLf. En cherchant un peut j'ai lu "retour charriot", un truc qui date des machines a écrire
    C'est Combinaison de retour chariot et de saut de ligneen VB.Net(CarriageReturn+LineFeed). (msdn doc bible à lire)
    Pas moyen de faire un retour à chariot ou un retour à la ligne sans lui dans un textbox ou listbox.....Indispensable(equivaut à vbNewLine).

    Je cherche a arrondir des valeur de serie de chart apparaissant dans les tooltip:
    y a t il une méthode pour le format d'affichage du tooltip?
    Bah,c'est simple .
    Uitlise Nombre.toString(chaine de format) avec un specificateur de format numerique standard(F,G,N) .
    Et affecte ta chaine de nombre avec ToolTip.SetToolTip(control,caption).
    Ceci -au passage -doit etre fait dans notre "famous" Sub New du form qui devient vachement utile.....................
    exemple code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Public Class Form2
    	Public Sub New()
     
     
    		' Cet appel est requis par le Concepteur Windows Form.
    		InitializeComponent()
     
    		' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
    		' Set up the delays for the ToolTip.
    		ToolTip1.AutoPopDelay = 5000
    		ToolTip1.InitialDelay = 1000
    		ToolTip1.ReshowDelay = 500
    		' Force the ToolTip text to be displayed whether or not the form is active.
    		ToolTip1.ShowAlways = True
     
    		' memo :F =>virgule fixe- D => decimal-N Nombre avec separateurs  milliers
    		Dim doubleNumber As Double
    		Dim strDouble As String
     
    		' Set up the ToolTip text for the Button .
    		doubleNumber = 125.423
    		strDouble = doubleNumber.ToString("F2")
    		ToolTip1.SetToolTip(Me.Button1, "MyButton :" & strDouble)
     
    		' Set up the ToolTip text Label1.
    		doubleNumber = -125.423
    		strDouble = doubleNumber.ToString("F3")
    		ToolTip1.SetToolTip(Me.Label1, "MyLabel1 :" & strDouble)
     
    		'Set up the ToolTip text Label2.
    		doubleNumber = -12445.6789
    		strDouble = doubleNumber.ToString("N")
    		ToolTip1.SetToolTip(Me.Label2, "MyLabel2 :" & strDouble)
    	End Sub
    End Class
    tu peux meme personnaliser l'apparence complete du tooltip à ta guise.En mettant sa propriete ToolTip.OwnerDraw=True(dessine par toi et non par window) et en gerant ses 2 events de peinture: toolTip_Draw et toolTip_PopUp
    Voici encore une fois un exemple tiree de la bible MSDN Doc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    Imports System
    Imports System.Drawing
    Imports System.Windows.Forms
    Imports System.Windows.Forms.VisualStyles
    ' Form for the ToolTip example.
    Public Class Form3
    	Public Sub New()
     
    		' Cet appel est requis par le Concepteur Windows Form.
    		InitializeComponent()
     
    		' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
    		' mets en forme the ToolTip and set initial values.
    		Me.toolTip1 = New System.Windows.Forms.ToolTip
    		Me.toolTip1.AutoPopDelay = 5000
    		Me.toolTip1.InitialDelay = 500
    		Me.toolTip1.OwnerDraw = True
    		Me.toolTip1.ReshowDelay = 10
     
    		' mets en forme button1 and set initial values.
    		Me.Button1.Location = New System.Drawing.Point(8, 8)
    		Me.button1.Text = "Button 1"
    		Me.toolTip1.SetToolTip(Me.button1, "Button1 tip text")
     
    		' mets en forme button2 and set initial values.
    		Me.Button2.Location = New System.Drawing.Point(8, 32)
    		Me.button2.Text = "Button 2"
    		Me.toolTip1.SetToolTip(Me.button2, "Button2 tip text")
     
    		' mets en forme button3 and set initial values.
    		Me.Button3.Location = New System.Drawing.Point(8, 56)
    		Me.button3.Text = "Button 3"
    		Me.toolTip1.SetToolTip(Me.button3, "Button3 tip text")
     
    		' mets en forme the Form.
    		Me.Text = "owner drawn ToolTip "
    	End Sub
     
    	' Determines the correct size for the button2 ToolTip.
    	Private Sub toolTip1_Popup(ByVal sender As System.Object, _
    	 ByVal e As PopupEventArgs) Handles toolTip1.Popup
     
    		If e.AssociatedControl Is button2 Then
     
    			Dim f As New Font("Times New Roman", 14)
    			Try
    				e.ToolTipSize = TextRenderer.MeasureText( _
    				 toolTip1.GetToolTip(e.AssociatedControl), f)
    			Finally
    				f.Dispose()
    			End Try
     
    		End If
    	End Sub
     
    	' Handles drawing the ToolTip.
    	Private Sub toolTip1_Draw(ByVal sender As System.Object, _
    	 ByVal e As DrawToolTipEventArgs) Handles toolTip1.Draw
    		' Draw the ToolTip differently depending on which 
    		' control this ToolTip is for.
     
    		' Draw a custom formatting text if the ToolTip is for button1.
    		If (e.AssociatedControl Is button1) Then
    			' Draw the standard background.
    			e.DrawBackground()
     
    			' Specify custom text formatting flags.
    			Dim sf As TextFormatFlags = TextFormatFlags.VerticalCenter Or _
    			   TextFormatFlags.HorizontalCenter Or _
    			   TextFormatFlags.NoFullWidthCharacterBreak
     
    			' Draw standard text with customized formatting options.
    			e.DrawText(sf)
    		ElseIf (e.AssociatedControl Is button2) Then
    			' Draw a custom background and text if the ToolTip is for button2.
     
    			' Draw the custom background.
    			e.Graphics.FillRectangle(Brushes.Blue, e.Bounds)
     
    			' Draw the standard border.
    			e.DrawBorder()
     
    			' Draw the custom text.
    			Dim sf As StringFormat = New StringFormat
    			Try
    				sf.Alignment = StringAlignment.Center
    				sf.LineAlignment = StringAlignment.Center
    				sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.None
    				sf.FormatFlags = StringFormatFlags.NoWrap
     
    				Dim f As Font = New Font("Arial", 12)
    				Try
    					e.Graphics.DrawString(e.ToolTipText, f, _
    					 SystemBrushes.ActiveCaptionText, _
    					 RectangleF.op_Implicit(e.Bounds), sf)
    				Finally
    					f.Dispose()
    				End Try
    			Finally
    				sf.Dispose()
    			End Try
    		ElseIf (e.AssociatedControl Is button3) Then
    			' Draw the ToolTip using default values if the ToolTip is for button3.
    			e.DrawBackground()
    			e.DrawBorder()
    			e.DrawText()
    		End If
    	End Sub
    End Class
    "chkRessortArriereDroit"
    A quoi sert 'chk'?
    bah c'est le nom du CheckBox associe associe au choix du RessortArriereDroit,puisqu'il y a dans ta classe voiture 4 ressorts ainsi nommes(il faut toujours de bonne praique prefixer les noms des controles en abregeant leur nom ......exemple :btnCeci,chkCeci, cboCela comme cela on n'aura pas - si tu veux une pagaille dans les noms des controles- lors des recherches.
    Par curiosité en combien de temps avez vous fait ces 200 lignes?
    2 Heures de temps quand on a deja traites des cas pareils .C'est affaire de repetition donc d'experience.
    Ce qui est difficile ce n'est pas tant la frappe du code ,mais plutot la direction ou l'on veut aller et le choix des moyens qui sont à notre disposition.
    Le delai peut etre completement fausse si on ne sait pas exactement ce que l'on veut ou si l'on le fait avec des moyens inappropries.
    En general ,moi au travail je raisonne comme Hitler qui disait d'apres Raymond Cartier journaliste-historien francais, à peu pres ceci à ses generaux : "vous me disez toujours que c'est impossible et apres que je l'ai ordonne vous le faites.Vous etes de mauvais soldats c'est tout".
    Voici un autre adage sur le temps pris à faire un travail: "le travail a tendance à occuper tout le temps qui lui est imparti".
    Bon code et bonne soiree...............

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Merci beaucoup pour ces réponses Mabrouki,

    Et surtout pour le temps consacré...

    Je m'y attaque.

    Mais j'ai dejà une autre question: J'ai dans la serie de checkbox consacré au ressort un checkbox consacré aux 2 ressorts avant droit et gauche, et de même pour l'arrière.

    Je peux mettre 2 propriétés dans le tag, avec une virgule?

    Comment faire ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      'checkPlot imprime  la valeur du Tag 
        Private Sub checkPlot(ByVal objTag As Object)
            If TypeOf (objTag) Is Integer Then
                For i = 10 To 100
                    objTag = i
                    Call PlotBalance(i)
                Next
     
            ElseIf TypeOf (objTag) Is String Then
                Call PlotMarque(objTag)
            End If
        End Sub

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Je viens de penser à une solution:

    Faire une propriété SpringStiffness_Front qui écrivent et retourne chacun des ressort avant droite et gauche...

  11. #11
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 421
    Points
    7 421
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Gualino Voir le message
    Merci beaucoup pour ces réponses Mabrouki,

    Et surtout pour le temps consacré...

    Je m'y attaque.

    Mais j'ai dejà une autre question: J'ai dans la serie de checkbox consacré au ressort un checkbox consacré aux 2 ressorts avant droit et gauche, et de même pour l'arrière.

    Je peux mettre 2 propriétés dans le tag, avec une virgule?

    Comment faire ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      'checkPlot imprime  la valeur du Tag 
        Private Sub checkPlot(ByVal objTag As Object)
            If TypeOf (objTag) Is Integer Then
                For i = 10 To 100
                    objTag = i
                    Call PlotBalance(i)
                Next
     
            ElseIf TypeOf (objTag) Is String Then
                Call PlotMarque(objTag)
            End If
        End Sub
    Tag est non typé (object).

    Tu peux donc l'affecter avec ce que tu veux.

    Tu peux par exemple lui mettre un int[] ou un List<Voiture> si ça te chante...

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    oui, ou dans mon cas une liste des propriété front left & right en tant que double...

    ok!

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Le programme tourne mais les valeurs du graph restent constantes, car la propriété ne change pas de valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #Region "Plot Selected Parts"
        ''' <summary>
        ''' Plot Selected Parts
        ''' Plot the magic number sensibility of the part that have been selected by the checkboxs.
        ''' </summary>
        ''' <param name="tag">tag (ChassisClass property as Double)</param>
        ''' <remarks></remarks>
        Private Sub PlotSelectedParts(ByVal tag As Object)
     
            Call CreateNewSetupChangeChart()
     
            Dim rangeSetupChange As Integer = CInt(RangeSetupChange_tbox.Text)
            Dim initialValue As Double = CDbl(tag)
     
            If TypeOf tag Is Double Then
     
                Dim increment As Integer
                increment = CInt(((rangeSetupChange * 2) / 5))
     
                For i = -(Abs(rangeSetupChange)) To Abs(rangeSetupChange) Step increment + 1
     
                    tag = initialValue * (1 + i / 100) 'Change the value of the property
     
                    Call EnterMagicNumberValuesToPlot(CDbl(tag))
                Next
     
            End If
    tag varie mais les propriété ne sont pas écrites:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Private _RollCenterHeight_Front As Double
        ''' <summary>
        ''' Roll center height Front [mm].
        ''' </summary>
        Public Property RollCenterHeight_Front As Double
            Get
                Return _RollCenterHeight_Front
            End Get
            Set(ByVal value As Double)
                _RollCenterHeight_Front = Value
                NotifyPropertyChanged("RollCenterHeight_Front")
            End Set
        End Property
    le binding:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #Region "BindCheckBoxToChassisClassProperties"
        ''' <summary>
        ''' Bind The check boxes of the 'Magic numbers sensiblity' to the chassisClass Instance.
        ''' </summary>
        ''' <param name="chassis"></param>
        ''' <remarks></remarks>
        Private Sub BindCheckBoxToChassisClassProperties(ByVal chassis As ChassisClass)
            For Each ctrl As CheckBox In Me.lstCheckBox
                ctrl.DataBindings.Clear()
            Next
     
            For Each checkbox As CheckBox In Me.lstCheckBox
                Select Case checkbox.Name
                    Case "ARBStiffnessFront_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "ARBStiffness_Front")
                    Case "ARBStiffnessRear_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "ARBStiffness_Rear")
                    Case "SpringStiffness_LF_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_LF")
                    Case "SpringStiffness_RF_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_RF")
                    Case "SpringStiffness_LR_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_LR")
                    Case "SpringStiffness_RR_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_RR")
                    Case "SpringStiffness_Front_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_Front")
                    Case "SpringStiffness_Rear_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_Rear")
                    Case "RollCenter_Front_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "RollCenterHeight_Front")
                    Case "RollCenter_Rear_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "RollCenterHeight_Rear")
                    Case "AckermannRatio_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "AckermannRatio")
                    Case "TotalMassWeightDistribution_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "TotalMassWeightDistribution")
                End Select
                checkbox.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged
            Next
        End Sub
    #End Region
    En plus je n'utilise qu'une seul instance de la classe ChassisClass


    J'ai votre exemple qui tourne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'checkPlot imprime  la valeur du Tag 
        Private Sub checkPlot(ByVal objTag As Object)
            If TypeOf (objTag) Is Integer Then
                For i = 10 To 100
                    objTag = i
                    Call PlotBalance(i)
                Next
     
            ElseIf TypeOf (objTag) Is String Then
                Call PlotMarque(objTag)
            End If
        End Sub
    mais bizarrement:

    If TypeOf (objTag) Is Integer Then : ici le type de objTag est String, alors que le tag est celui de la propriété RessortAvantDroit

    Je tag par le designer, c'est bien celui qui ne fait pas partie du DataBinding du designer?

  14. #14
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    bonjour gualino
    et StringBuilder.
    Dans le context actuel tel que traite par Gualino ,la propriete Tag ne sert pas à stocker simplement une valeur mais est utilise dans un DataBindings.

    Elle est binde à une prop de la classe voiture et le champ DataMember requiert un nom de propriete valide ou de classe valide dans le cas d'une listesous forme bien sur de string.
    Par connsequent dans le context traite Tag ne peut recevoir des noms de propriete invalides(double, des chaines avec des virgules,des entiers .....etc).

    Le seul moyen de traiter un cas pareil c'est passer par la Reflection et un seul controle CheckListBox et -svp sans DataBindings-comme le montre cette exemple (mais la reflection n'est pas recommende dans une application grand public).
    code precedent legerement modifie pour gualino (qui montre comment l'infrastructure .net permet une amnesie totale des noms des objets ,controles etc....select case mal barres.....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     
     
    'Forme exemple precedent repris avec un CheckedListBox
    '
    'NB :pour tester le "Plot"  
    '-il faut "filler" la liste de voiture d'abord
    '-Choisir une instance voiture par Marque dans ComboBox
    '-Cocher un  ou plusieurs check
    '-Plotter .le resultat se trouve dans le TextBox
     
    Imports System.Reflection
     
    Public Class frmTwoProp
    	Private myVoiture As Voiture
    	Private lstVoitures As List(Of Voiture)
    	Private selectedVoiture As Voiture = Nothing
    	'Disparait : remplace par un simple controle CheckedListBox
    	''Private lstCheckBox As List(Of CheckBox)
    	Public Sub New()
    		' Cet appel est requis par le Concepteur Windows Form.
    		InitializeComponent()
     
    		' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
    		Me.txtDisplayPlot.ScrollBars = ScrollBars.Both
    	End Sub
    	Private Sub btnFillVoitures_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFillVoitures.Click
    		'Raz
    		Me.lstVoitures = Nothing
    		Me.cboSelectVoiture.Items.Clear()
     
    		'Initialise une liste voitures
    		Me.lstVoitures = New List(Of Voiture)
    		Dim rnd As Random = New Random
    		For i As Integer = 0 To 19
    			Me.myVoiture = New Voiture
    			Me.myVoiture.Marque = "Marque" & (i + 1).ToString
    			Me.myVoiture.RessortArriereDroit = rnd.Next(10, 20)
    			Me.myVoiture.RessortArriereGauche = rnd.Next(30, 40)
    			Me.myVoiture.RessortAvantDroit = rnd.Next(50, 60)
    			Me.myVoiture.RessortAvantGauche = rnd.Next(70, 80)
    			Me.lstVoitures.Add(myVoiture)
    			Me.cboSelectVoiture.Items.Add(Me.myVoiture)
    		Next
    		Me.cboSelectVoiture.DisplayMember = "Marque"
     
    		' Prepare CheckedListBox
    		SetupCheckedListBox()
     
    	End Sub
    	Private Sub SetupCheckedListBox()
    		'mise au point
    		Me.CheckedListBox1.SelectionMode = SelectionMode.One
    		Me.CheckedListBox1.CheckOnClick = True
     
    		'remplit le CheckedListBox avec les proprietes du type Voiture
    		'en utilisant la Reflection(un objet  propriete s'appelle PropertyInfo) 
    		' 
    		Dim myTypePerso As Type = GetType(Voiture)
    		Me.CheckedListBox1.Items.AddRange(myTypePerso.GetProperties)
    		Me.CheckedListBox1.DisplayMember = "PropertyInfo.Name"
    	End Sub
    	' ici: le changemeent c'est avoir au moins une marque 
    	' de selection pour imprimer l'objet courant voiture
    	' sinon le bouton btnPlot reste inactive 
    	Private Sub cboSelectVoiture_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboSelectVoiture.SelectedIndexChanged
    		selectedVoiture = CType(cboSelectVoiture.SelectedItem, Voiture)
    		If selectedVoiture Is Nothing Then Return
     
    	End Sub
    	'Boucle sur les CheckListBoxes pour plotter ceux qui sont "checkes" et 
    	Private Sub btnPlot_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlot.Click
    		If Me.lstVoitures Is Nothing Then
    			Me.txtDisplayPlot.Text = "Nothing to plot"
    			Return 'liste vide .pas de voiture
    		End If
    		If selectedVoiture Is Nothing Then
    			Return 'Pas de voiture de marque voiture selectionne
    		End If
     
     
    		'DEMO:affiche la liste des "checkes" 
    		Me.txtDisplayPlot.Clear()
    		Me.txtDisplayPlot.Text = "Nom et Type des props stores est :" & vbCrLf
    		For Each itemChecked In CheckedListBox1.CheckedItems
    			Dim pinfo As PropertyInfo = CType(itemChecked, PropertyInfo)
    			Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & pinfo.Name & " - " & pinfo.PropertyType.ToString() & "  etat : " & _
    			Me.CheckedListBox1.GetItemCheckState(CheckedListBox1.Items.IndexOf(itemChecked)).ToString() & vbCrLf
    		Next
    		Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & vbCrLf
    		'IMPRIME:serieux,imprime les "checkes" 
    		For Each itemChecked In CheckedListBox1.CheckedItems
    			If Me.CheckedListBox1.GetItemCheckState(CheckedListBox1.Items.IndexOf(itemChecked)) Then
    				Me.PlotBalanceBis(itemChecked)
    			End If
    		Next
    	End Sub
    	'PlotBalanceBis  si integer
    	Private Sub PlotBalanceBis(ByVal propChecked As PropertyInfo)
    		'pour valeur type integer
    		Dim currentValueInt As Integer
    		'pour valeur type string
    		Dim currentValueStr As String
     
    		'Recherche prop par nom dans selectedVoiture 
    		'et affiche valeur courante
    		Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & "Affiche Valeur courante de prop checke :" & vbCrLf
     
    		For Each propInfo As PropertyInfo In selectedVoiture.GetType.GetProperties
    			If propInfo.Name = propChecked.Name Then
    				If propInfo.PropertyType Is GetType(Integer) Then 'Type Integer
    					currentValueInt = propChecked.GetValue(selectedVoiture, Nothing)
    					Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & currentValueInt.ToString & vbCrLf
    				ElseIf propInfo.PropertyType Is GetType(String) Then 'Type String
    					currentValueStr = propChecked.GetValue(selectedVoiture, Nothing).ToString
    					Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & currentValueStr & vbCrLf
    				End If
    			End If
    		Next
    		'Fait varier(20 valeures) la valeur de chaque prop 
    		' de  selectedVoiture et affiche les 10 valeurs
    		Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & "Variation de valeur courante :" & vbCrLf
    		Dim displayValueAfter As String
    		For Each prop As PropertyInfo In selectedVoiture.GetType.GetProperties
    			If prop.Name = propChecked.Name Then
    				'
    				'Type Integer
    				If prop.PropertyType Is GetType(Integer) Then
    					currentValueInt = propChecked.GetValue(selectedVoiture, Nothing)
    					'variation 
    					For i As Integer = 1 To 20
    						currentValueInt = currentValueInt + 2 * i
    						propChecked.SetValue(selectedVoiture, currentValueInt, Nothing)
    						displayValueAfter = propChecked.GetValue(selectedVoiture, Nothing).ToString
    						Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & propChecked.Name & " : " & displayValueAfter & vbCrLf
    					Next
    					'
    					'Type String
    				ElseIf prop.PropertyType Is GetType(String) Then
    					currentValueStr = propChecked.GetValue(selectedVoiture, Nothing)
    					'variation 
    					For i As Integer = 1 To 20
    						currentValueStr = "NewMarque" & i.ToString
    						propChecked.SetValue(selectedVoiture, currentValueStr, Nothing)
    						displayValueAfter = propChecked.GetValue(selectedVoiture, Nothing)
    						Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & propChecked.Name & " : " & displayValueAfter & vbCrLf
    					Next
    				End If
    			End If
    		Next
    	End Sub
    End Class
    bon code..............

  15. #15
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Pardon mais je ne comprends pas ce qui est entendu par "requiert un nom de propriété valide"

    Qui a t il d'invalide dans le nom de mes propriétés?


    Je ne veux pas que la CheckedListBox contiennent toutes les propréét de la classe alors j’essaie d'en retirer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       For Each item As PropertyInfo In CheckedListBox1.Items
     
                If item.Name.Contains("Droit") Then
     
                    CheckedListBox1.Items.Remove(item)
                    CheckedListBox1.Refresh()
                End If
     
            Next
    Le problème et que je modifie la longueur de la list que j'énumère, avec Refresh çà fonctionne mieu 2 sec le temps d'afficher la le contenu puis crash.

    il y a la method RefreshItem et RefreshItems, mais elle sont protected, alors j'ai essayé en héritant de ListBox...sans succès.

  16. #16
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    rebonjour gualino
    D'abord corriger un bogue dans le dernier code poste.
    Ensuite il faut faire des choix:
    1/Ou tu utilises le binding par code :
    - avec la sub BindCurrentVoitureToCheckBox
    - la navigation dans la liste (ou la datatable s'il en est) avec un combo comme celui donne qui sert de bindingnavigator..

    2/ou tu utilises le binding par designer :
    -tu bindes chaque controle checkbox par designer
    -un controle de navigation associe genre combo ou datagridview ou listbox ou whatever you want.
    IL ne faut pas surtout mixer le choix 1 et 2 car ils ne sont pas compatible.

    Quelque soit la methode pour le binding un controle de navigation est necessaire pour preciser au checkbox à quelle instance de voiture il est lie.
    Sans cela la prop Tag contient Nothing ,le Vide sideral..................et on ne peut imprimer le vide.....
    le code exemple avec la propriete double fonctionnel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
     
    'exemple repris avec des corrections et 
    'utilise toString(chaine de format) 
    Imports System
    Public Class frmBindingDesigner
    	Private myVoiture As Voiture
    	Private lstVoitures As List(Of Voiture)
    	Private lstCheckBox As List(Of CheckBox)
    	Private selectedVoiture As Voiture = Nothing
     
    	Public Sub New()
    		' Cet appel est requis par le Concepteur Windows Form.
    		InitializeComponent()
     
    		' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
    	End Sub
    	Private Sub btnFillVoitures_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFillVoitures.Click
    		'Raz
    		Me.lstCheckBox = Nothing
    		Me.lstVoitures = Nothing
    		Me.cboSelectVoiture.Items.Clear()
     
    		'Initialise une liste voitures
    		Me.lstVoitures = New List(Of Voiture)
    		Dim rnd As Random = New Random
    		For i As Integer = 0 To 19
    			Me.myVoiture = New Voiture
    			Me.myVoiture.Marque = "Marque" & (i + 1).ToString
    			Me.myVoiture.RessortArriereDroit = rnd.Next(10, 20)
    			Me.myVoiture.RessortArriereGauche = rnd.Next(30, 40)
    			Me.myVoiture.RessortAvantDroit = rnd.Next(50, 60)
    			Me.myVoiture.RessortAvantGauche = rnd.Next(70, 80)
    			Me.lstVoitures.Add(myVoiture)
    			Me.cboSelectVoiture.Items.Add(Me.myVoiture)
    		Next
    		Me.cboSelectVoiture.DisplayMember = "Marque"
     
    		' Factorise  les checkboxes concernes 
    		' les mets dans lstCheckBox
    		Me.lstCheckBox = New List(Of CheckBox)
    		GetCheckBoxes()
    		Me.VoitureBindingSource.DataSource = Me.lstVoitures
     
    		'un datagridview (pour illustration) permet de mieux visualiser cet etat de fait
    		'Me.DataGridView1.AllowUserToAddRows = False
    		'Me.DataGridView1.AllowUserToDeleteRows = False
    		'Me.DataGridView1.AllowUserToOrderColumns = True
    		'Me.DataGridView1.DataSource = Me.lstCheckBox
     
    	End Sub
    	Private Sub GetCheckBoxes()
    		Me.lstCheckBox.Clear()
    		Me.lstCheckBox = New List(Of CheckBox)
    		For Each ctrl As Control In Me.Controls
    			If TypeOf (ctrl) Is CheckBox Then
    				Dim chk As CheckBox = CType(ctrl, CheckBox)
    				chk.Checked = False
     
    				Me.lstCheckBox.Add(ctrl)
    			End If
    		Next
    	End Sub
    	'Boucle sur les CheckBox pour plotter ceux qui sont "checkes" et 
    	Private Sub btnPlot_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlot.Click
    		If Me.lstVoitures Is Nothing Then
    			Me.txtDisplayPlot.Text = "Nothing to plot"
    			Return 'pas de voiture
    		End If
    		Me.txtDisplayPlot.Clear()
    		For Each ctrl As CheckBox In Me.lstCheckBox
    			If ctrl.Checked Then
    				Me.checkPlot(ctrl.Tag)
    			End If
    		Next
    	End Sub
    	'checkPlot imprime  la valeur du Tag 
    	Private Sub checkPlot(ByVal objTag As Object)
     
    		'UN CONTROLE POUR TESTER LE RANGE
    		Me.RangeSetupChange_tbox.Text = "2"
    		'
    		'Utilise Integer.Parse
    		Dim rangeSetupChange As Integer = Integer.Parse(Me.RangeSetupChange_tbox.Text)
    		'Heresie logique :parce que l'on sait pas encore   si c'est un double
    		'Dim initialValue As Double = CDbl(objTag)
    		If TypeOf (objTag) Is Double Then
    			'deplacer ici 
    			Dim initialValue As Double = CDbl(objTag)
    			Dim increment As Integer
    			increment = CInt(((rangeSetupChange * 2) / 5))
     
    			For i = -(Math.Abs(rangeSetupChange)) To Math.Abs(rangeSetupChange) Step increment + 1
     
    				objTag = initialValue * (1 + i / 100) 'Change the value of the property
     
    				Call PlotBalanceDouble(CDbl(objTag))
    			Next
    		End If
    	End Sub
    	'LE PlotBalanceDouble  SI DOUBLE
    	Private Sub PlotBalanceDouble(ByVal d As Double)
    		Me.txtDisplayPlot.Text = Me.txtDisplayPlot.Text & d.ToString("F4") & vbCrLf
    	End Sub
    	' met à jour le binding du Tag du Checkbox si l'objet courant  voiture
    	' change
    	Private Sub cboSelectVoiture_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboSelectVoiture.SelectedIndexChanged
    		selectedVoiture = CType(cboSelectVoiture.SelectedItem, Voiture)
    		If selectedVoiture Is Nothing Then Return
     
    		'binde !
    		BindCurrentVoitureToCheckBox(selectedVoiture)
     
    	End Sub
    	Private Sub BindCurrentVoitureToCheckBox(ByVal objVoiture As Voiture)
    		'Clear databinding precedent
    		For Each ctrl As CheckBox In Me.lstCheckBox
    			ctrl.DataBindings.Clear()
    		Next
    		'binde  prop "Tag" du checkbox => à prop  corresp. de instance voiture
    		For Each ctrl As CheckBox In Me.lstCheckBox
    			Select Case ctrl.Name
    				Case "chkRessortArriereDroit"
    					ctrl.DataBindings.Add("Tag", objVoiture, "RessortArriereDroit")
    					ctrl.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged
    				Case "chkRessortAvantDroit"
    					ctrl.DataBindings.Add("Tag", objVoiture, "RessortAvantDroit")
    				Case "chkRessortArriereGauche"
    					ctrl.DataBindings.Add("Tag", objVoiture, "RessortArriereGauche")
    				Case "chkRessortAvantGauche"
    					ctrl.DataBindings.Add("Tag", objVoiture, "RessortAvantGauche")
    				Case "chkMarque"
    					ctrl.DataBindings.Add("Tag", objVoiture, "Marque")
    				Case "chkRollCenterHeight_Front"
    					ctrl.DataBindings.Add("Tag", objVoiture, "RollCenterHeight_Front")
    			End Select
    			ctrl.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged
    		Next
    	End Sub
     
    End Class
    bon code........................

  17. #17
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    J'ai solutionné mon dernier problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim listALaNoix As New List(Of PropertyInfo)
     
        Private Sub RemoveItem()
            For Each item As PropertyInfo In CheckedListBox1.Items
                If item.Name.Contains("Droit") Then
                    listALaNoix.Add(item)
                End If
            Next
     
            For Each itemtoremove As PropertyInfo In listALaNoix
                Me.CheckedListBox1.Items.Remove(itemtoremove)
            Next
     
        End Sub
    Mais à propos du controle de navigation, mon programme n'utilise qu'une seule instance voiture (Shame on me).

    ligne 39 j'appel la methode "BindCurrentVoitureToCheckBox" renomé...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Private isMagicNumberSensibilityRunnning As Boolean = False
        Private Sub PlotSetupChange_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PlotSetupChange_button.Click
     
            'initialization
            isMagicNumberSensibilityRunnning = True
            row = 0
            Me.PartSetupChange_tlp.Controls.Clear()
     
            Call SetYMDRange()
     
            'Set vectors
            ReDim latAccelGraph(1, betaStep, deltaStep)
            ReDim yawMomGraph(1, betaStep, deltaStep)
     
            If MyChassis Is Nothing Then
                Call CreateChassis()
                Call ReadChassisInputs()
                Call MyChassis.CalculateStaticOutputProperties()
                Call MyChassis.CalculateDynamicOutputProperties()
            End If
     
            If Me.CalculateTireOutputs_button.Checked = False Then 'Means Tire Geometry Values are not bound
                Me.CalculateTireOutputs_button.Checked = True
                Call BindTireGeometry()
                Call TireButtonON()
            End If
     
            'Include Aero Force
            If Me.IncludeAero_MagicNumberSensibility_cbox.Checked = True Then
                Call CreateAero()
                Call ReadAeroInputs()
                MyAero.RideHeight_Front = MyAero.RideHeightStatic_Front
                MyAero.RideHeight_Rear = MyAero.RideHeightStatic_Rear
                Call ReadMaps()
                Call AeroLoopCalculation()
            End If
     
     
            Call BindCheckBoxToChassisClassProperties(MyChassis)
     
            speed = CDbl(SpeedSetupChange_tbox.Text) / 3.6
     
            For Each checkbox As CheckBox In Me.lstCheckBox
                If checkbox.Checked Then
                    Me.PlotSelectedParts(checkbox.Tag)
                End If
            Next
     
            isMagicNumberSensibilityRunnning = False
     
        End Sub
    ce qui repond à çà non?
    la navigation dans la liste (ou la datatable s'il en est) avec un combo comme celui donne qui sert de bindingnavigator..

  18. #18
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    bonjour gualino
    Bon faisons la part des choses d'abord.
    Pardon mais je ne comprends pas ce qui est entendu par "requiert un nom de propriété valide"
    Ce n'est pas à toi que je m'adresses mais à StringBuilder car il ne savait peut etre pas dans quel contexte on voulait utiliser le Tag (notre contexte est le binding et on doit fournir à binding un nom de propriete et de classe valide).
    Bien revenons à nos moutons.
    Tu travailles comment ?
    1/pour la 1ere methode j'ai poste l'orientation dans le post precedent.

    2/pour la 2eme methode(dernier post) qui est encore plus delicate tu es entrain de modifier une collection dans une boucle For Each ....Next.
    C'est interdit par le compilateur et ne sera jamais compile !!!!!!!
    Reflechis un peu mieux comment eviter un un obstacle du compilateur.....en le contournant pardi...
    Au lieu de faire ca pourquoi ne pas sauter cette prop "Droit" au moment de l'ajout.
    code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    '"Mais que diable est-il alle faire dans cette galere?"
    	'L'avare de Moliere.....
    	'il faut faire ca dans SetupCheckedListBox
    	'les ajouter un à un avec CheckedListBox.Items.Add()
    	'et "skipper" les indesirables. 
    	Private Sub SetupCheckedListBox()
    		'mise au point
    		Me.CheckedListBox1.SelectionMode = SelectionMode.One
    		Me.CheckedListBox1.CheckOnClick = True
     
    		'remplit le CheckedListBox avec les proprietes du type Voiture
    		'en utilisant la Reflection(un objet  propriete s'appelle PropertyInfo) 
    		' 
    		'On n'utilise plus Items.AddRange()
    		Dim myTypePerso As Type = GetType(Voiture)
    		For Each prop As PropertyInfo In myTypePerso.GetProperties
    			'skip the unwanted prop
    			If prop.Name.Contains("Droit") Then Continue For
    			CheckedListBox1.Items.Add(prop)
    		Next
    		Me.CheckedListBox1.DisplayMember = "PropertyInfo.Name"
    	End Sub
    bpn code..........

  19. #19
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    rebonjour gualino
    ligne 39 j'appel la methode "BindCurrentVoitureToCheckBox" renomé...
    Si tu as une instance voiture(ou MyChassis) cest suffisant.

    C'est pour cela que j'ai "invente" cette sub car elle permet de se passer
    d'un controle de navigation (la liste de voiture me suffit ,j'acquiers une instance de voiture avec cette liste par code et je le donne à la sub miraculeuse "BindCurrentVoitureToCheckBox").

    Mais j'ai donne l'exemple Combo car je pensais que tu utilisais un tel controle pour permettre à l'user de choisir un engin et de faire des calculs et du graphisme.
    Sache ceci c'est utile pour la "culture du binding" (qui ne rapportes de fruit qu'à d'autres comme toujours):
    A l'evidence si une propriete Tag ne varie pas ca ne sert à rien de de la binder.
    Si elle varie on utilise couramment ce scenario pour l'user:
    -primo indiquer la valeur dans la plage de variation (c'est pourquoi on donne les exemples avec une liste ou datable).
    -secundo indiquer à binding à tout instant à quelle valeur il doit pointer sur la liste (ou la datable).Ce pointage se fait couramment grace à un controle de navigation qui sous entends une liste ou une datatable
    Je sais que c'est pas evident pour beaucoup.

    bonne soire.............

  20. #20
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Les tag des checkBox sont liés au propriété de MyChassis

    La valeur du tag est bien celle de la propriété en question.

    Mais quand je fais varier la valeur du Tag, la valeur de la propriété ne change pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
     
    #Region "Plot Button"
        Private isMagicNumberSensibilityRunnning As Boolean = False
        Private Sub PlotSetupChange_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PlotSetupChange_button.Click
     
            'initialization
            isMagicNumberSensibilityRunnning = True
            row = 0
            Me.PartSetupChange_tlp.Controls.Clear()
     
            Call SetYMDRange()
     
            'Set vectors
            ReDim latAccelGraph(1, betaStep, deltaStep)
            ReDim yawMomGraph(1, betaStep, deltaStep)
     
            If MyChassis Is Nothing Then
                Call CreateChassis()
            End If
            Call ReadChassisInputs()
            Call MyChassis.CalculateStaticOutputProperties()
            Call MyChassis.CalculateDynamicOutputProperties()
     
            If Me.CalculateTireOutputs_button.Checked = False Then 'Means Tire Geometry Values are not bound
                Me.CalculateTireOutputs_button.Checked = True
                Call BindTireGeometry()
                Call TireButtonON()
            End If
     
            'Include Aero Force
            If Me.IncludeAero_MagicNumberSensibility_cbox.Checked = True Then
                Call CreateAero()
                Call ReadAeroInputs()
                MyAero.RideHeight_Front = MyAero.RideHeightStatic_Front
                MyAero.RideHeight_Rear = MyAero.RideHeightStatic_Rear
                Call ReadMaps()
                Call AeroLoopCalculation()
            End If
     
     
            Call BindCheckBoxToChassisClassProperties(MyChassis)
     
            speed = CDbl(SpeedSetupChange_tbox.Text) / 3.6
     
            For Each checkbox As CheckBox In Me.lstCheckBox
                If checkbox.Checked = True Then
                    Me.PlotSelectedParts(checkbox.Tag)
                End If
            Next
     
            isMagicNumberSensibilityRunnning = False
     
        End Sub
    #End Region
    #End Region
     
    #Region "Set CheckBoxs List"
        Private lstCheckBox As List(Of CheckBox)
        ''' <summary>
        ''' Set CheckBoxs List.
        ''' Add all the textboxs of the PartSetupChange GroupBox into the list of checkbox lstCheckBox.
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub SetCheckBoxsList()
            Me.lstCheckBox = New List(Of CheckBox)
            For Each control As Control In PartSetupChange_box.Controls
                If TypeOf control Is CheckBox Then
                    Dim chk As CheckBox = CType(control, CheckBox)
                    Me.lstCheckBox.Add(chk)
                End If
            Next
        End Sub
    #End Region
     
    #Region "Bind CheckBox To ChassisClass Properties"
        ''' <summary>
        ''' Bind The check boxes of the 'Magic numbers sensiblity' to the chassisClass Instance.
        ''' </summary>
        ''' <param name="chassis"></param>
        ''' <remarks></remarks>
        Private Sub BindCheckBoxToChassisClassProperties(ByVal chassis As ChassisClass)
            For Each ctrl As CheckBox In Me.lstCheckBox
                ctrl.DataBindings.Clear()
            Next
     
            For Each checkbox As CheckBox In Me.lstCheckBox
                Select Case checkbox.Name
                    Case "ARBStiffnessFront_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "ARBStiffness_Front")
                    Case "ARBStiffnessRear_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "ARBStiffness_Rear")
                    Case "SpringStiffness_LF_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_LF")
                    Case "SpringStiffness_RF_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_RF")
                    Case "SpringStiffness_LR_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_LR")
                    Case "SpringStiffness_RR_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_RR")
                    Case "SpringStiffness_Front_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_Front")
                    Case "SpringStiffness_Rear_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "SpringStiffness_Rear")
                    Case "RollCenter_Front_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "RollCenterHeight_Front")
                    Case "RollCenter_Rear_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "RollCenterHeight_Rear")
                    Case "AckermannRatio_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "AckermannRatio")
                    Case "TotalMassWeightDistribution_cbox"
                        checkbox.DataBindings.Add("Tag", chassis, "TotalMassWeightDistribution")
                End Select
                checkbox.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged
            Next
        End Sub
    #End Region
     
    #Region "Plot Selected Parts"
        ''' <summary>
        ''' Plot Selected Parts
        ''' Plot the magic number sensibility of the part that have been selected by the checkboxs.
        ''' </summary>
        ''' <param name="tag">tag (ChassisClass property as Double)</param>
        ''' <remarks></remarks>
        Private Sub PlotSelectedParts(ByVal tag As Object)
     
            Call CreateNewSetupChangeChart()
     
            Dim rangeSetupChange As Integer = CInt(RangeSetupChange_tbox.Text)
            Dim initialValue As Double = CDbl(tag)
     
            If TypeOf tag Is Double Then
     
                Dim increment As Integer
                increment = CInt(((rangeSetupChange * 2) / 5))
     
                For i = -(Abs(rangeSetupChange)) To Abs(rangeSetupChange) Step increment + 1
     
                    tag = initialValue * (1 + i / 100) 'Change the value of the property
     
                    Call EnterMagicNumberValuesToPlot(CDbl(tag))
                Next
     
            End If
     
            Call AddMagicNumberPlotToTableLayoutPanel()
     
        End Sub
    #End Region
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #Region "Roll center height [mm]"
        Private _RollCenterHeight_Front As Double
        ''' <summary>
        ''' Roll center height Front [mm].
        ''' </summary>
        Public Property RollCenterHeight_Front As Double
            Get
                Return _RollCenterHeight_Front
            End Get
            Set(ByVal value As Double)
                _RollCenterHeight_Front = value
                NotifyPropertyChanged("RollCenterHeight_Front")
            End Set
        End Property
     
        Private _RollCenterHeight_Rear As Double
        ''' <summary>
        ''' Roll center height Rear [mm].
        ''' </summary>
        Public Property RollCenterHeight_Rear As Double
            Get
                Return _RollCenterHeight_Rear
            End Get
            Set(ByVal value As Double)
                _RollCenterHeight_Rear = value
                NotifyPropertyChanged("RollCenterHeight_Rear")
            End Set
        End Property
    #End Region

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. faire varier des valeur avec Matlab
    Par Enthalpy dans le forum Simulink
    Réponses: 1
    Dernier message: 20/03/2010, 13h40
  2. Un timer pour faire varier des valeurs pour une période donnée.
    Par zimoun dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 22/10/2009, 01h42
  3. Réponses: 4
    Dernier message: 23/04/2008, 17h03
  4. faire correspondre des valeurs
    Par thierrry81 dans le forum Access
    Réponses: 2
    Dernier message: 06/12/2006, 22h38
  5. [C#] Conserver des valeurs de propriétés d'une page
    Par elod38 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/03/2005, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo