none
Les GroupBox et leurs contrôles disparaissent du designer quand on les déplace ? RRS feed

  • Question

  • Bonjour,

    sous VS2010 VB.net, j'ai crée une classe héritée de groupbox dans laquelle j'ai redéfini OnVisibleChanged pour que mon groupbox se centre automatiquement sur la form où il est placé.

    Suite à ça, j'ai intégré ce control dans ma barre d'outils et l'ai placé sur une form existante contenant déjà des groupbox "normaux" et j'ai plusieurs phénomènes dérangeant :

    - lorsque je déplace un groubox de cette nouvelle classe où tout autre groubox "normal" de la form, ils disparaissent du designer. Il reste dans les objet de la form mais on ne peut plus les voir.

    - ma fonction redéfini OnVisibleChanged dans ma classe héritée s’exécute également en conception et pas seulement à l'éxécution du programme. Le groupbox se place donc automatiquement au centre de mon designer et je ne peux le mettre ailleurs.

     

    Merci d'avance pour vos retours.

     

    mercredi 4 mai 2011 10:29

Réponses

  • Bonsoir,

    vous pouvez utiliser la propriété DesignMode ( que le contrôle GroupBox posséde par héritage ) et tester si oui on non vous êtes en mode design.

    Vous pouvez ainsi désactiver le code de votre handler en mode design.

    Cordialement

     

    • Marqué comme réponse YanT lundi 9 mai 2011 09:08
    mercredi 4 mai 2011 16:27
    Modérateur

Toutes les réponses

  • Bonjour,

    Peux-t-on voir comment tu as écris ta classe héritée ?

     


    fred
    mercredi 4 mai 2011 12:24
  • Voici la classe héritée (ci-dessous).

    Ce problème est survenu juste après l'utilisation de cette classe dans mon projet et a affecté également les autres groupbox. Le problème, c'est que maintenant, même en enlevant cette classe du projet, le problème se produit toujours (exemple : j'avais un groupbox général avec une plusieurs contrôles à l'intérieur dont deux autres groupbox de base (par défaut non visible) et ceux ci disparaissent dès que je déplace le groupbox général)

    Public Class CtrlGroupBox
      Inherits GroupBox
      Public Property _centree As Boolean = False
    
      Protected Overrides Sub OnVisibleChanged(ByVal e As System.EventArgs)
        If Me.Visible Then
          If _centree Then
            centrer()
          End If
        End If
        MyBase.OnVisibleChanged(e)
      End Sub
    
      Public Sub centrer()
         Me.Left = (Me.Parent.Width - Me.Width - 25) / 2
         Me.Top = (Me.Parent.Height - Me.Height - 45) / 2
      End Sub
    
    End Class
    
    

    mercredi 4 mai 2011 13:04
  • J'ai un début de piste :

    mes groupbox contiennent des classes héritées de listbox dont la fonction OnLostFocus a été redéfinie pour que le parent (ici la groupbox) passe visible=false.

    J'ai mis en commentaire la ligne Me.Parent.Visible = False dans cette classe de listbox et mes groupbox ne disparaissent plus dans le designer. C'était donc à priori normal si le designer exécutait le code mais ma question est donc celle ci : comment empêcher que le code de mes contrôles personnalisés ne s’exécute dans l'environnement de développement (designer) et qu'il soit appelé uniquement lors de l’exécution.

    Pour info, c'était le cas avant que je n'essaye de mettre cette classe héritée de groupbox dont le code (post précédent) ne me parait pas bizarre.

    mercredi 4 mai 2011 16:08
  • Bonsoir,

    vous pouvez utiliser la propriété DesignMode ( que le contrôle GroupBox posséde par héritage ) et tester si oui on non vous êtes en mode design.

    Vous pouvez ainsi désactiver le code de votre handler en mode design.

    Cordialement

     

    • Marqué comme réponse YanT lundi 9 mai 2011 09:08
    mercredi 4 mai 2011 16:27
    Modérateur
  • Merci, je ne connaissais pas. Ce ne serait donc pas ma classe héritée de groupbox qui a provoqué le problème ; pourtant l'évenement OnLostFocus de ma classe héritée de listbox ne s'éxécutait pas en avant en mode design ...

    Dans ce cas pourquoi, l'evenement OnLostFocus du projet lui et pas de la classe héritée ne s’exécute pas lui aussi par défaut en mode design ? (a moins qu'il contrôle aussi le booleen DesignMode aussi ?)

    mercredi 4 mai 2011 16:52
  • Bonjour, YanT,

    Est-ce que les explications de Nikho vous ont aidé à résoudre votre problème ? Dans l'affirmative, pourriez-vous marquer son post comme réponse, afin que d'autres personnes avec le même problème puissent profiter de cette solution ? Merci !

     

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 9 mai 2011 07:53
  • J'avais voté pour sa réponse mais pas "marquée comme réponse"
    C'est fait maintenant.
    lundi 9 mai 2011 09:10