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

sfingers76 Messages postés 12 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 2 août 2012 - 14 févr. 2012 à 15:56
 Utilisateur anonyme - 24 févr. 2012 à 19:29
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

NHenry Messages postés 15115 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 8 mai 2024 159
14 févr. 2012 à 18:33
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 févr. 2012 à 05:33
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
0
sfingers76 Messages postés 12 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 2 août 2012
15 févr. 2012 à 09:11
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 ?
0
NHenry Messages postés 15115 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 8 mai 2024 159
17 févr. 2012 à 23:46
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sfingers76 Messages postés 12 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 2 août 2012
20 févr. 2012 à 11:27
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 ...
0
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
23 févr. 2012 à 21:01
bonjour
Me.MdiChildren(Name).Show ?
@+JP
0
NHenry Messages postés 15115 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 8 mai 2024 159
23 févr. 2012 à 21:15
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
0
sfingers76 Messages postés 12 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 2 août 2012
24 févr. 2012 à 10:42
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.
0
mjpmjp Messages postés 115 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 29 juin 2012
24 févr. 2012 à 17:42
bonjour
autant pour moi...
je vais Reflectionner sur les Classes
@+JP
0
Utilisateur anonyme
24 févr. 2012 à 19:29
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
0
Rejoignez-nous