Ouverture paramétrée de forms au démarrage de l'application

Signaler
Messages postés
12
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
2 août 2012
-
 Utilisateur anonyme -
Bonjour,

J'ai développé une application au sein de ma société dont l'accès est autorisé en fonction de divers paramètres :
- Connexion à l'AD pour vérification du user et mot de passe
- Vérification dans une base de données SQL Server quels sont les droits de l'utilisateur qui vient de se connecter

Le fait de se connecter avec son user permet à cet utilisateur de retrouver son espace de travail tel qu'il l'avait paramétré. Je stocke donc pour chaque user les paramètres de taille et d'emplacement de chaque form (etc ...) lorsque je les quitte et vais rechercher ces paramètres à leur réouverture.

J'aurais souhaité pousser l'expérience un peu plus loin. Je m'explique : Mon application est une MDI. Au déchargement de la fenêtre principale (MDI), je vais écrire dans la base de données toutes les (name) des forms "MDI childs". Le but est évidemment de pouvoir ouvrir ces forms lors du prochain démarrage de l'application.

Actuellement, j'écris bien la ou les forms ouvertes dans la base de données, mais le hic, c'est que je n'ai pas trouvé de moyen de charger ces forms au démarrage de l'application. En clair, je suis bien en mesure de récupérer le nom de mes forms, mais comment les charger ? Je cherche depuis quelques temps, mais je ne trouve malheureusement pas ...

Pourriez vous me donner un petit coup de main, SVP ?

10 réponses

Messages postés
14827
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 octobre 2021
157
Bonjour,

Tu peux utiliser soit les évènements de chargement et déchargement, ou alors, faire ton propre Main.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
Je passe mes journées a me loguer, sur n sites de l'intranet...

c'est d'un lourd !

a partir du moment ou je suis logué sous Windows, et que je ne laisse pas mon poste en accès libre, les applications devraient d'elle même regarder le Username, sans le demander sans cesse...


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
12
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
2 août 2012

Bonjour,

@Renfield : Pour le login, c'est tout simplement parce que cette application est installée sur un poste où l'authentification Windows s'effectue sur un seul et unique user. C'est la politique générale qui avait été choisie pour ces postes. Il est donc nécessaire pour les utilisateurs qui ont plus de droits sur l'application de se logger avec leur user ... c'est vrai que c'est lourd, mais dans le cas présent, je n'avais pas trop le choix.

@NHenry : Je ne vois pas trop comment mettre ça en place ... aurais tu un exemple de code, STP ?
Messages postés
14827
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 octobre 2021
157
Bonjour,

Dans un module :
Sub Main()
    FrmIdentify.ShowDialog
    FrmPrincipale.ShowDialog
End Sub


Après, il faut dire dans les propriétés de ton projet de démarrer sur la Sub Main et pas sur une form ("objet de démarrage" je crois).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
12
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
2 août 2012

Merci NHenry.

Je pense ne pas avoir réussi à expliquer correctement ce que je voulais faire passer.
Pas de souci pour charger une form de mon projet, quand il s'agit bien d'une form.

Le souci, ici, c'est qu'au démarrage de l'application, je récupère une liste de forms sous forme de strings (frmIdentity, frmPrincipale, etc ...), ce ne sont en aucun cas des objets Windows.Forms.

Voici le code dur le formClosed de la form principale MDI :


For i = 0 To UBound(Me.MdiChildren)
Call enregistrementParam("openedWindow", Me.MdiChildren(i).Name)
Next

enregistrementParam étant une procédure qui va aller écrire les enregistrements dans la base de données.

Voici ensuite le code d'une procédure qui est appelée au démarrage de la form principale MDI :

Public Sub loadUserParams(ByVal crtForm As Form)
Try
Dim cdUserParams As New SqlCommand("SELECT * FROM UserParams WHERE userid=" & connectedUserId, dbParam)
Dim rdUserParams As SqlDataReader
rdUserParams = cdUserParams.ExecuteReader
While rdUserParams.Read
Select Case rdUserParams("libelle")
Case Is = crtForm.Name & "Width"
crtForm.Width = rdUserParams("valeur")
... etc ... etc ...etc ...etc ...etc ...etc ...etc ...
Case Is = "openedWindow"
'C'est ici que ça coince ...
... etc ...etc ...etc ...etc ...etc ...etc ...etc ...etc ...

J'espère que ces informations sont plus complètes ...

Je cherche toujours de mon côté mais j'avoue sécher complètement ... c'est peut être un truc tout bête ...
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012

bonjour
Me.MdiChildren(Name).Show ?
@+JP
Messages postés
14827
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 octobre 2021
157
Bonjour,

Dans ce cas, je te conseil d'aller voir du coté de Reflection pour charger une classe à partir de son nom.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
12
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
2 août 2012

Merci pour vos réponses.

@mjpmjp : euh ... non, ça ne marche pas comme ça
@NHenry : Je vais jeter un oeil à tout ça et si je trouve une solution, je la poste ici.
Messages postés
115
Date d'inscription
dimanche 6 avril 2003
Statut
Membre
Dernière intervention
29 juin 2012

bonjour
autant pour moi...
je vais Reflectionner sur les Classes
@+JP

Bonsoir,

Tu peux utiliser cette méthode (optimisation du code à revoir...)
Dim forms_du_projet_a_ouvrir() As String = {"frmIdentity", "frmPrincipale"}
Dim myAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim types As Type() = myAssembly.GetTypes()
For Each myType In types
    If myType.BaseType.FullName = "System.Windows.Forms.Form" Then
        If forms_du_projet_a_ouvrir.Contains(myType.Name) Then
            Select Case myType.Name
                Case "frmIdentity"
                    Dim nf As New frmIdentify
                    nf.Show()
                Case "frmPrincipale"
                    Dim nf As New frmPrincipale
                    nf.Show()
                '...
            End Select
        End If
    End If
Next