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 :

Ouverture d'un formulaire au centre d'un autre


Sujet :

VB.NET

  1. #1
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut Ouverture d'un formulaire au centre d'un autre
    Bonjour à tous,

    J'ai une application type Service Windows.
    Mon main se trouve dans une module, il gère mon appli et lance des formulaires et des actions dans différent thread.

    Lorsque mon formulaire principal est ouvert, et lors d'un chargement d'un fichier excel (un peu long car lourd) puis traitement des données(Ecriture, traitement, et lecture dans le fichier excel), j'ouvre un petit formulaire d'attente avec barre graph, info de l’état d'avancement.

    Ce formulaire je le lance dans un nouveau thread du coup il n'a pas de formulaire parent. Cela évite les blocages lors de temps d'accès parfois long sur excel.

    Est-ce possible d'automatiser l'affichage de ce dernier au centre du formulaire principal ouvert.

    La fonction: StartPosition = CenterParent ne fonctionne pas puisque ouvert dans un nouveau thread.
    J'ai essayé de lui indiquer la fenêtre parent (dans son new) mais cela ne marche pas j'ai une exception de type : "Impossible d'ajouter un contrôle de premier niveau à un contrôle."

    Mon souci c'est que l'on a 2 écrans et la gestion de Windows la dessus est un peu aléatoire. Il va m'ouvrir mon 1er formulaire sur un écran et le formulaire d'attente sur l'autre écran.
    pas très gênant non plus mais agaçant pour certain.

    Pour le moment j'ai déclaré les ouvertures en StartPosition = CenterScreen

    Si l'on ne peut pas lui définir automatiquement le parent et enfant. On peut peut être récupérer la position de la fenêtre et ouvrir la nouvelle fenêtre d'attente avec des positions définies.


    Merci de votre aide.

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Bonjour,

    Pour faire ce genre de chose il faut utiliser un formulaire mdi parent et des formulaire mdi enfant.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Bonjour,

    Pour faire ce genre de chose il faut utiliser un formulaire mdi parent et des formulaire mdi enfant.
    Merci maxtwist,

    C'est ce que j'ai cru comprendre à la suite de mon post et mes recherches.

    Mais ma form d'attente que j’appellerais "frmSplash" s'ouvre aussi en 1er, le temps de charger le gros fichiers excel. Elle s'ouvre ensuite pour les traitements (écriture et lecture dans le fichier excel) en fonction de ce que l’opérateur lui demande depuis le formulaire principal.


    Sinon j'y suis arrivé en utilisant les coordonnées à l’écran:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
        Private Sub frmSplash_Load(sender As Object, e As System.EventArgs) Handles Me.Load
     
            If formMain IsNot Nothing Then
                Me.Location = New Point(formMain.Location.X + ((formMain.Width / 2) - (Me.Width / 2)), formMain.Location.Y + ((formMain.Height / 2) - (Me.Height / 2)))
            End If
     
        End Sub
    formMain étant mon formulaire principal.


    Je trouve que le maniement d'excel est vraiment long lorsque l'on utilise:
    Imports Microsoft.Office
    Imports Microsoft.Office.Interop
    Imports Microsoft.Office.Interop.Excel

    Ce n'est pas le sujet, mais si vous avez un autre moyen de lire des fichiers excel je suis preneur. De plus cela me rajoute 4 dll à mon projet.

  4. #4
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Ta Form parent MDI sera vide du départ...

    donc rien empêche d'afficher ton formulaire "spalsh" en premier, et le ré afficher quand tu en as besoin.
    Tu peux même choisir lequel des deux formulaires s'affiche, plutôt que de superposer...

    Quand au Dll... C'est n'est pas dramatique... J'ai des projets qui s'appellent entre eux où il y a beaucoup plus de Dll.
    C'est une question de besoin.

    Et la vitesse... Plutôt que d'ouvrir le fichier et et le lire (en tant que fichier), je crois que tu peux utiliser ton document excel comme une DataSource (tout comme access) sur laquelle tu vas te connecter.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  5. #5
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Ta Form parent MDI sera vide du départ...

    donc rien empêche d'afficher ton formulaire "spalsh" en premier, et le ré afficher quand tu en as besoin.
    Tu peux même choisir lequel des deux formulaires s'affiche, plutôt que de superposer...
    J'ai déjà utilisé une fois le MDI, mais je n'y est pas pensé en créant ce nouveau soft car ma form d'attente n'est autre qu'une simple flash sans le controlbox avec seulement quelques info. Mais dans un projet MDI peut on ouvrir les formulaire dans des thread différent? Car par exemple lorsque je récupère les données dans Excel, je les affiches en même temps dans mon formulaire principal du coup le barregraph saccade. Je pourrai aussi lancer uniquement la gestion du barre graph en thread, il y a un système simplifier il me semble, parfait pour ce genre de gestion.

    Enfin bref à méditer pour mon prochain soft.

    Citation Envoyé par mactwist69 Voir le message
    Quand au Dll... C'est n'est pas dramatique... J'ai des projets qui s'appellent entre eux où il y a beaucoup plus de Dll.
    C'est une question de besoin.
    Oui oui je me doute bien et étant plus souvent sur VB6, des DLL j'en n'ai en pagaille. Mais c'est dommage que le framework Dotnet n'est pas ces propres instructions office.


    Citation Envoyé par mactwist69 Voir le message
    Et la vitesse... Plutôt que d'ouvrir le fichier et et le lire (en tant que fichier), je crois que tu peux utiliser ton document excel comme une DataSource (tout comme access) sur laquelle tu vas te connecter.
    Je sais pas ce que vous entendez par ouvrir en tant que fichier, mais je ne l'ouvre pas en simple "StreamReader" mais avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private _Application As Excel.Application
        Private _WorkBooks As Workbooks
        Private _WorkBook As Workbook
        Private _PagesDuClasseur As Sheets          
        Private _PageEnCours As Worksheet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    _Application = New Excel.Application
    _Application.Visible = False
     _WorkBook = _Application.Workbooks.Open(MonFichier, , read_only)
    _PagesDuClasseur = _WorkBook.Sheets
    _PageEnCours = _PagesDuClasseur.Item(1)
    j'ai enlevé la cosmétique de sécurité et vérification.

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par megamario Voir le message
    Je trouve que le maniement d'excel est vraiment long lorsque l'on utilise:
    Imports Microsoft.Office
    Imports Microsoft.Office.Interop
    Imports Microsoft.Office.Interop.Excel

    Ce n'est pas le sujet, mais si vous avez un autre moyen de lire des fichiers excel je suis preneur. De plus cela me rajoute 4 dll à mon projet.
    si c'est de la lecture dans un fichier ayant des colonnes distinctes avec un titre il y a oledb, pas besoin d'ajout de dll, beaucoup moins de code et c'est énormément plus performant
    "select col1, col2 from sheet1"
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    si c'est de la lecture dans un fichier ayant des colonnes distinctes avec un titre il y a oledb, pas besoin d'ajout de dll, beaucoup moins de code et c'est énormément plus performant
    "select col1, col2 from sheet1"


    Merci Pol63, je regarde sa.

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

Discussions similaires

  1. Ouverture d'un formulaire a partir ...
    Par nache dans le forum IHM
    Réponses: 3
    Dernier message: 21/06/2005, 11h30
  2. Réponses: 9
    Dernier message: 27/10/2004, 17h00
  3. Réponses: 6
    Dernier message: 11/10/2004, 14h58
  4. Réponses: 9
    Dernier message: 07/10/2004, 19h41
  5. lecture de son à l'ouverture d'un formulaire
    Par cynferdd dans le forum IHM
    Réponses: 4
    Dernier message: 16/06/2003, 15h31

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