<Serializable()> _ Public Class ClonableList Inherits List(Of String) Public Function Clone() As ClonableList Return CType(Me.MemberwiseClone, ClonableList) End Function End Class
Public type_segment As New ClonableList 'listes des choix de bout de segment
Private Sub F30_segment_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ComboDeb.DataSource = Form1.affaire.type_segment.Clone ComboFin.DataSource = Form1.affaire.type_segment.Clone End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionDim List1 As New List(Of String) With List1 .Add("Tata") .Add("Toto") End With Dim List2 As List(Of String) List2 = List1
dim a as new list(of string) 'Tu déclare un nouvel objet Vide, strucuré 'sous vb pour recevoir les données de ta classe, et tu réserve un nouvel 'espace mémoire à l'aide de new, la variable a, pointera vers cet espace 'mémoire. a = form1.malist 'Ici tu efface simplement l'adresse pointant vers ton espace mémoire de a pour la remplacer par celle de form1.malist.
Private Sub Form1_Load() Handles Me.Load Dim Toto As String = "Tata" Call TotoByVal(Toto) Call TotoByRef(Toto) End Sub Private Sub TotoByRef(ByRef Toto As String) Toto = "Titi" End Sub Private Sub TotoByVal(ByVal Toto As String) Toto = "Titi" End Sub
Option Explicit On Option Strict On Public Class F30_segment ' instance de travail Private _segment As cls_segment = Nothing Private Sub F30_segment_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'renseigne les source des combobox en recréant une nouvelle instance de la list 'car sinon les combos sont liés, NB:un object ne se copie pas avec =, mais en créant une nouvelle instance ! 'EX : dim a as list(os string) = form1.affaire.type_segment, ne fais que copier le pointeur de pile vers les valeurs du tas Dim listDeb As New List(Of String) listDeb.AddRange(Form1.affaire.type_segment) ComboDeb.DataSource = listDeb 'Form1.affaire.type_segment ComboFin.DataSource = Form1.affaire.type_segment End Sub ' appel pour un nouveau segment Public Overridable Overloads Function Show(ByVal Id_reseau As Integer, ByVal Id_segment As Integer) As cls_segment Me.Text = "Créer un nouveau segment" _segment = Nothing _segment = New cls_segment _segment.Id = Id_segment ' Valeur par défaut Txt_nom.Text = "S" & Id_reseau.ToString & "-" & Id_segment.ToString Txt_longueur.Text = "" Txt_commentaire.Text = "" ' affiche le bouton annuler Bp_quit.Visible = True MyBase.ShowDialog() Return _segment End Function ' appel pour la modification d'un segment Public Overridable Overloads Function Show(ByVal segment_modif As cls_segment) As cls_segment Me.Text = "Modifier ce segment" _segment = segment_modif Txt_nom.Text = _segment.nom Txt_longueur.Text = _segment.longueur.ToString Txt_commentaire.Text = _segment.commentaire ComboDeb.SelectedItem = _segment.type_deb ComboFin.SelectedItem = _segment.type_fin ' cache le bouton annuler Bp_quit.Visible = False MyBase.ShowDialog() Return _segment End Function Private Sub Bp_ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bp_ok.Click valide() End Sub Private Sub Bp_quit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bp_quit.Click _segment = Nothing Me.Close() End Sub Private Sub valide() If Txt_nom.Text <> Nothing And Txt_longueur.Text <> Nothing Then _segment.nom = Txt_nom.Text _segment.longueur = CDbl(Txt_longueur.Text) _segment.commentaire = Txt_commentaire.Text _segment.type_deb = ComboDeb.SelectedItem.ToString <= ICI _segment.type_fin = ComboFin.SelectedItem.ToString <= ET ICI RIEN NE VAS PLUS Me.Close() Else If Txt_nom.Text Nothing Then Txt_nom.BackColor Color.Firebrick If Txt_longueur.Text Nothing Then Txt_longueur.BackColor Color.Firebrick End If End Sub End Class
Dim s As New cls_Segment' Nouvel instance d'un segment s.Nom = "Toto" 'on définit sa propriété nom F30_segment.show(s)'On appel la feuille chargé de modification 'de mon segment de sorte à ce que l'utilisateur puisse le modifier 'visuellement 'Mais show ne lance pas la form en mode modale, donc l'exécution de mon 'programme continue... s.Nom = "Tata"' La valeur du nom de mon segment vient de changer... ' 'Et paf, l'utilisateur qui vient de fermer la F30 a modifier le nom, 'De ce fait, le nom a encore changé
' définie un double dégradée via colorblend (couleur puis position de 0 à 100%) Dim couleurs As Color() = {Color.Black, Color.White, Color.Black} Dim posCouleurs As Single() = {0.0F, 0.5F, 1.0F} Dim monDegrade As New ColorBlend monDegrade.Colors = couleurs monDegrade.Positions = posCouleurs 'cercle de fin ( double dégradé géré par interpolationcolors de la brush ) Dim zone As New Rectangle(CInt(largueur - CInt(largueur / 10) - CInt(diametre / 1)) _ , CInt(hauteur / 2) - CInt(diametre / 2) _ , diametre _ , diametre) degrade = New LinearGradientBrush(zone, Color.Black, Color.White, LinearGradientMode.Vertical) degrade.InterpolationColors = monDegrade g.DrawEllipse(Pens.Black, zone)