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 :

Fonctionnement des usercontrols dans les forms [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Par défaut Fonctionnement des usercontrols dans les forms
    Bonjour,

    Etant nouveau sur le site, merci de préciser si je ne suis pas dans la bonne section.

    J'ai cherché un peu partout sur internet mais je n'ai pas trouvé (en même temps c'est dur de condenser en quelques termes pour la recherche)

    Sinon, voici mon problème.

    Je crée un 'usercontrol' hérité de Label pour pour en faire un label avec le texte qui défile. Pour ce faire, j'utilise un 'timer' que je lance au chargement de l'UC. Mon soucis est que VS crash quand je met mon composant dans ma 'form'.

    Je sais que le problème vient du fait que le 'timer' se lance quand je suis dans la fenêtre de conception de la 'form' car j'ai déjà eu le problème avec d'autres UC où je le leurs mettait la propriété 'Dock' à 'Fill' et du coup ma 'form' prenez la taille de mon écran.

    J'aimerais donc savoir s'il y à moyen de faire faire pour que mes initialisations ne se fassent que quand j'éxecute le programme et pas que je suis dans le concepteur de 'form'.

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    J'imagine que tu actives le timer dans le constructeur de ton usercontrol.

    Je pense que le problème se trouve là.

    A ta place, j'ajouterais un méthode dans ton usercontrol dont la tâche serait de démarrer le timer et, dans le constructeur du formulaire, j'appellerai cette méthode.

    L’inconvénient est qu'il faut le faire pour chaque label.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    dans ton projet [Menu->Fichier->Ajouter->Projet Existant], tu peux ajoute la source de ton usercontrol.
    ainsi tu debug les 2 en même temps!

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Bonjour,
    dans ton projet [Menu->Fichier->Ajouter->Projet Existant], tu peux ajoute la source de ton usercontrol.
    ainsi tu debug les 2 en même temps!
    Bonjour,

    Si je comprend bien c'est pour le cas ou mon usercontrol serait à par de mon projet ? Car mon usercontrol est développé dans mon projet pour le moment.

    Cordialement,

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Par défaut
    Bonjour Kropernic et merci pour ta réponse rapide.

    C'est bien ce que je fais (activer le timer dans le constructeur de mon usercontrol).
    J'avais pensé à ta solution mais elle m’embête un petit peu (comme tu l'as dit je doit faire le déclenchement pour chaque label si je met l'activation directement dans le constructeur de la form). Mais je garde cela de côté si je ne trouve rien d'autre.

    Je regardais du côté du DesignMode mais je ne sais pas si ça sert bien à ça.

    Si vous pouvez m’éclairer la dessus.

    Merci.

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    En même temps, l'appel de cette méthode qui démarrerait le timer de chaque usercontrol peut se faire en, au pire, 3 lignes de code. Pas bien grave donc.

    Y a moyen de joindre une copie des sources de ton control pour faire quelques tests ? La problématique m'intéresse.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    En même temps, l'appel de cette méthode qui démarrerait le timer de chaque usercontrol peut se faire en, au pire, 3 lignes de code. Pas bien grave donc.

    Y a moyen de joindre une copie des sources de ton control pour faire quelques tests ? La problématique m'intéresse.
    Je sais bien qu'il n'y a pas grand chose mais j'aurais juste préférais tout avoir dans le usercontrol.

    Voici mon code du usercontrol pour mon label modifié:

    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
     
    <Global.System.ComponentModel.Description("Classe descendante de 'Label' pour faire une barre d'information avec défilement.")>
    Public Class CLabelInfo
        Inherits System.Windows.Forms.Label
     
    #Region "Declaration"
     
        'Constantes
        Private Const DEFAULT_MESSAGE As String = ""
        'Propriétés
     
        'Variables globales
        Private _message As String = Nothing
     
        Private WithEvents Tm_Defil As Timer = Nothing
     
    #End Region
     
    #Region "New"
     
        Public Sub New()
            MyBase.New()
     
            Init()
     
        End Sub
     
    #End Region
     
    #Region "Events"
     
    #Region "mes Events"
     
    #End Region
     
        Private Sub Tm_Defil_Tick(sender As Object, e As EventArgs) Handles Tm_Defil.Tick
            Static Position As Long = 0
            Static Initialise As Boolean = False
     
            If Not Initialise Then
                Initialise = True
                Position = maxChar
     
            End If
     
            Position -= 1
     
            Dim i1 As Long = maxChar - textRessource.Length
            Dim i2 As Long = maxChar - Position
     
            If Position > i1 Then
                _message = Space(Position) + Mid(textRessource, 1, i2)
     
            ElseIf Position >= 0 Then
                _message = Space(Position) + textRessource
     
            Else
                _message = Mid(textRessource, Math.Abs(Position))
     
            End If
     
            If Position < -Len(textRessource) Then
                Position = maxChar
     
            End If
     
            Me.Text = _message
     
            Me.Refresh()
     
        End Sub
     
    #End Region
     
    #Region "Property"
     
        <Global.System.ComponentModel.Description("Obtient ou définit le nombre max de caractères du label."), _
        Global.System.ComponentModel.DefaultValue(100)>
        Public Property maxChar As Long
     
        <Global.System.ComponentModel.Description("Obtient ou définit le texte à afficher."), _
        Global.System.ComponentModel.DefaultValue("")>
        Public Property textRessource As String
     
     
    #End Region
     
    #Region "Function"
     
    #Region "Initialisation"
     
        ''' <summary>
        ''' Initialise l'objet ...
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub Init()
            Initvariables()
            InitRessources()
            InitObjects()
     
        End Sub
     
        ''' <summary>
        ''' Initialise les variables de l'objet ...
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub Initvariables()
            'Propriétés
     
            'Variables globales
            _message = DEFAULT_MESSAGE
     
            Tm_Defil = New Timer
     
        End Sub
     
        ''' <summary>
        ''' Initialise les ressources de l'objet ...
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub InitRessources()
            If DesignMode Then
                Tm_Defil.Start()
     
            End If
     
        End Sub
     
        ''' <summary>
        ''' Initialise les objets du Contrôle ...
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub InitObjects()
     
        End Sub
     
    #End Region
     
    #End Region
     
    End Class
    et voici le code du contrôle qui utilise le label (que je glisse via la boite à outils):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CLi_Info.maxChar = 80
    CLi_Info.textRessource = My.Resources.String1

  8. #8
    Membre émérite
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Par défaut
    Bonjour,
    Il est possiblde de savoir si on se trouve dans le designer de VS ou en éexécution
    Code que j'utilise (en c# :/)
    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
     
            /// <summary>
            /// Obtient une valeur indiquant si le contexte d'exécution est le designer de visual Studio
            /// </summary>
            public static bool IsInDesignMode
            {
                get
                {
                    bool isInDesignMode = LicenseManager.UsageMode == LicenseUsageMode.Designtime; // || Debugger.IsAttached == true;
     
                    if (!isInDesignMode)
                    {
                        using (var process = Process.GetCurrentProcess())
                        {
                            isInDesignMode =  process.ProcessName.ToLowerInvariant().Contains("devenv");
                        }
                    }
     
                    return isInDesignMode;
                }
            }
    D'autre part je te conseillerais de mettre le start du timer dans la méthode Load du user control plutôt que dans le constructeur.

  9. #9
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Déjà juste en copiant ton code, j'ai plusieurs erreurs de compilations. Principalement des erreurs de conversions implicites.

    Je te conseille vivement de mettre ton projet en Option Strict On et Option Explicit On.

    EDIT : Après correction des erreurs de conversion, je n'ai aucun problème pour ajouter le contrôle sur un formulaire. Par contre, il ne défile nullement...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Ajouter des icones dans les mises en formes conditionnelles
    Par brice86190 dans le forum Conception
    Réponses: 1
    Dernier message: 06/10/2010, 12h55
  2. [HTML] Forme des liens dans les pages html et autres
    Par lysandre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 07/04/2008, 01h16
  3. Fonctionnement des Treview dans les userform
    Par popsmelove dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/01/2008, 13h12
  4. Utilisation des collections dans les UserControl
    Par flo67 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/01/2008, 20h34

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