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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : novembre 2020
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Affichage d'une Form dans une Form problème avec le curseur des TextBox
    Bonjour,

    J'ai créé une appli pour gérer des patients dans un cabinet de naturopathe.

    Nom : dbnaturo.jpg
Affichages : 68
Taille : 187,0 Ko

    Cette application est composée d'une form parent et dans le menu de gauche si je clique sur la loupe, il s'ouvre une form recherche comme sur la vue ci-dessus.
    Cette form est appelée avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    form_recherche.TopLevel = false;
    this.Controls.Add(form_recherche);
    Jusque là pas de soucis cela fonctionne. Si je clique sur la loupe, j'affiche la form et si je reclique cela cache la form recherche. Elle est toujours attachée au menu et il est juste possible de la dimensionner du coté droit.

    Le souci c'est lorsque je veux placer mon curseur dans les textbox de cette form recherche, impossible... Je peux juste double cliquer pour sélectionner l'ensemble du texte ou me placer en bout de texte. par contre la saisie de texte fonctionne. C'est vraiment ce qui concerne les actions avec la souris.

    Je ne peux pas déclarer la form parent en MDIcontainer parce que derrière j'utilise des richtextbox et je ne pourrai pas les placer dans un container ou alors si je peux mais je ne verrai plus les formchild puisque pas prévu pour contenir autre chose que des forms un container.
    La solution semble donc de conserver le Control.Add mais comment pouvoir gérer correctement les textbox ?
    Avez vous une idée ? Une explication au problème ? Une solution à m'apporter ?
    Tout ce que j'ai trouvé en solution concerne le passage de Controls.Add à MDIparent et ça pas possible.

    Merci !

    Patrice

  2. #2
    Membre expert
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    mars 2005
    Messages
    1 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2005
    Messages : 1 680
    Points : 3 140
    Points
    3 140
    Par défaut
    A priori tu cherche à faire du MDI sans vraiment en faire.
    Et puisque ta Form est prévue pour s'incruster dans la Form existante, je te suggère de faire un UserControl à la place.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : novembre 2020
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par popo Voir le message
    A priori tu cherche à faire du MDI sans vraiment en faire.
    Et puisque ta Form est prévue pour s'incruster dans la Form existante, je te suggère de faire un UserControl à la place.
    Oui c'est ça... Il faut que j'affiche une Form dans une Form et qu'il soit possible d'agrandir la fenêtre enfant d'un coté via la souris. Je ne connais pas l'UserControl. L'occasion d'apprendre... Je voudrais obtenir la même chose qui est utilisé dans visual basic, les petites fenêtres sur les cotés...

  4. #4
    Membre expert
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    mars 2005
    Messages
    1 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2005
    Messages : 1 680
    Points : 3 140
    Points
    3 140
    Par défaut
    UserControl et Form héritent les deux de ContainerControl.
    Ils sont donc très similaires.
    Je n'ai pas une liste exhaustive des différences mais tu peux
    - ajouter des contrôles dessus,
    - gérer les même évènements sur ces contrôles
    - gérer à peu près tout les évènements que la Form sur le contrôle lui-même.

    Donc dans l'idée
    1. Créer ce UserControl de la même taille que ta Form
    2. Sélectionner tous les contrôles de ta Form et les copier sur le UserControl
    3. Prendre tout le code de ta forme et le copier dans le code du UserControl
    4. Rebrancher les événements sur tes contrôles (manuellement ou pas copie du code concerné dans Form.Designer.cs

    Une fois cela effectué, tu peux docker ton UserControl dans un panel ou moment où tu cliques sur la loupe.
    Le fait qu'il soit docké va permettre de redimensionner automatiquement le UserControl quand tu redimensionnera le panel.

    Pour le resize du panel, tu trouveras des tonnes d'exemple sur le net.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    novembre 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : novembre 2020
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    J'ai donc essayé avec un panel. Le souci c'est que lorsque je dock le panel à gauche, je perds la superposition des composants.
    J'ai donc positionné le panel à gauche sans docker et j'ai utilisé la possibilité de le dimensionner à droite mais ce n'est pas fluide du tout.
    Après quelques recherche, j'ai découvert que en mettant la propriété FormBorderStyle de mon formulaire de recherche sur none, mon problème avec les Textbox disparaissait.
    J'ai donc utilisé la méthode WndProc(ref Message message) pour pouvoir dimensionner ma form avec son FormBorderStyle = None sur son coté droit comme ci-dessous :

    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
            private const int  HTRIGHT = 11; //pour garder la possibilité de redimensionner la Form du coté droit
            const int _ = 10;
     
            Rectangle Right { get { return new Rectangle(this.ClientSize.Width - _, 0, _, this.ClientSize.Height); } }
     
            protected override void WndProc(ref Message message)
            {
                base.WndProc(ref message);
     
                if (message.Msg == 0x84) // WM_NCHITTEST
                {
                    var cursor = this.PointToClient(Cursor.Position);
                    if (Right.Contains(cursor)) message.Result = (IntPtr)HTRIGHT;
                }
            }
    Et la tout est ok...

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/04/2013, 09h31
  2. Repérer une balise XML dans une archive : problème avec zipgrep
    Par VforVincent dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 29/06/2011, 15h34
  3. Div dans une div problème avec firefox
    Par mathias59 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 11/12/2009, 15h52
  4. Problème avec la gestion des fichier dans une JList()
    Par chebmo1986 dans le forum Composants
    Réponses: 3
    Dernier message: 18/02/2009, 23h49
  5. Réponses: 5
    Dernier message: 27/08/2003, 11h45

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