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

Windows Forms Discussion :

[C#] OpenFileDialog et SaveFileDialog restreints à certains dossiers / volumes


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut [C#] OpenFileDialog et SaveFileDialog restreints à certains dossiers / volumes
    Bonjour à tous

    J'ai besoin d'aide pour un problème en C# (Framework .Net 1.1)

    Je cherche à créer l'équivalent des boîtes de dialogue OpenFileDialog et SaveFileDialog, mais qui soient restreints à des volumes logiques (des clés USB dans mon cas précis). Le but étant d'interdire l'ouverture et la sauvegarde de fichiers dans les dossiers de C: par exemple.
    Or, je n'ai pas trouvé le moyen d'agir sur le combobox donnant les dossiers et volumes (respectivement à côté des labels "Regarder dans :" et "Enregistrer dans :") par défaut comme racine de l'arborescence du datagrid montrant tous les sous-dossiers et les fichiers. Je sais récupérer tous les volumes logiques qui m'intéressent mais je ne sais pas comment modifier la liste des items du combobox. Je cherche donc aussi à virer les grosses icônes sur le côté gauche (les liens vers "Mes Documents", "Poste de travail" etc...).
    J'aurais aimé éviter de refaire entièrement ces boîtes de dialogue, puisqu'elles ont des propriétés très intéressantes comme la gestion des retraits des volumes (par exemple quand on éjecte une clé USB). Bref la grosse flemme de tout refaire ! J'avais l'idée d'hériter les forms OpenFileDialog / SaveFileDialog mais sans succès (classe "sealed") ...

    Quel serait le moyen pour moi de réutiliser le maximum de codes / méthodes déjà défini pour ces boîtes de dialogues ?

    Merci de m'éclairer et à bientôt !

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Désolé, mais à ma connaissance pas d'autres alternatives propres que l'héritage de la classe abstraite FileDialog; au boulot monsieur le developpeur

  3. #3
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut
    En fouinant j'ai déniché ceci : http://msdn.microsoft.com/msdnmag/is...3/CuttingEdge/
    Ca permet de modifier les grosses icônes à gauche d'un OpenFileDialog / SaveFileDialog avec le registre Windows. En gros pour y arriver, je m'amuse à modifier les clés de registre dynamiquement via mon code C#.
    Seulement, toujours rien sur le combobox ... Peut-être y a-t-il une méthode similaire (je lance un appel : y a-t-il des pros du registre Windows ici ? )

    Si je devrais hériter de FileDialog, quelle méthode dois-je redéfinir ? Et surtout comment dénicher celle qui pourrait agir sur ce combobox ?

    Petite chose encore : pour définir le dossier lu par défaut, j'ai voulu mettre le "Poste de travail". J'ai donc codé :

    fileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
    Pourtant, ça ne fonctionne pas ; le path d'environnement est égal à "" ... Rhaaa mais pourquoi ?!!

    Merci bien !

    J'en profite pour reposer une autre question : comment forcer une boîte de dialogue à se fermer sans appuyer ni sur le bouton OK ni sur annuler ? Mon but c'était de recharger ce qui compose le FileDialog mais apparemment c'est impossible... Je désire donc la détruire et en recréer une autre.

  4. #4
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    maform.Close();
    à lancer depuis l'intérieur de la Form en question ou depuis une autre Form.

  5. #5
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut
    Ce n'est pas une form !

  6. #6
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Exact. Raison de plus pour la recoder

    Snon, t'as essayé le bon vieux 'Dispose()' ? ca donne quoi ?

  7. #7
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par Nullos Oracle
    J'en profite pour reposer une autre question : comment forcer une boîte de dialogue à se fermer sans appuyer ni sur le bouton OK ni sur annuler ? Mon but c'était de recharger ce qui compose le FileDialog mais apparemment c'est impossible... Je désire donc la détruire et en recréer une autre.
    La réponse est une question car pourquoi utiliser une boîte de dialogue alors

  8. #8
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut
    Bah comme je l'ai dit, le but c'est de rafraîchir ma boîte de dialogue ; car en fait je voudrais que les grosses îcones à gauche de la boîte (par défaut il y a "Mes Documents", "Bureau"...) montrent des raccourcis vers des volumes type clés USB branchés. Or si j'en débranche ou rajoute une, il faudrait que ses îcones changent avec l'évènement (car ce n'est pas géré, contrairement au DirListBox de la boîte).

    Seulement je n'ai vu aucun moyen de rafraîchir la boîte de dialogue (oui j'ai besoin d'une boîte de dialogue, car il faut bien empêcher l'utilisateur de faire autre chose comme modifier le fichier qu'il compte enregistrer par exemple). La seule idée que j'avais c'était de fermer la boîte de dialogue puis la relancer immédiatement, ce qui lui ferait prendre en compte le changement sur les clés USB. Y aurait-il un moyen "propre" de rafraîchir un FileDialog ?

    Sinon mes autres questions tiennent toujours pour ceux qui s'y seraient déjà collés !

  9. #9
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    J'ai ptet une solution alternative à ton pb :
    * Tu créé un user "utilisateur de mon appli".
    * Tu lui interdit l'accès à C:
    * Quand tu lances ton programme, tu impersonnifies cet utilisateur
    => Comme ça tout personne qui se sert de ton appli ne pourras pas accéder à C:

    Note : ça ne marche que sur la machine où tu as fait la manip.
    Si tu veux généraliser, ça devient un peu plus compliqué. Faut automatiser toutes ces manip à l'install

  10. #10
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut
    Citation Envoyé par neguib
    Désolé, mais à ma connaissance pas d'autres alternatives propres que l'héritage de la classe abstraite FileDialog; au boulot monsieur le developpeur
    Désolé j'ai suivi celui qui avait le plus d'étoiles dans son rang !
    Je m'en doutais ; en fait par hériter je voulais plutôt dire implémenter les mêmes fonctionnalités qu'un FileDialog. Devoir tout refaire avec un minimum de ressources (entre tous les handlers et events sur les messages Windows) c'est extrêmement délicat.

  11. #11
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Citation Envoyé par Nullos Oracle
    Désolé j'ai suivi celui qui avait le plus d'étoiles dans son rang !
    Et la MSDN, elle a combien d'étoiles ? :p
    Citation Envoyé par Nullos Oracle
    Je m'en doutais ; en fait par hériter je voulais plutôt dire implémenter les mêmes fonctionnalités qu'un FileDialog. Devoir tout refaire avec un minimum de ressources (entre tous les handlers et events sur les messages Windows) c'est extrêmement délicat.
    ***** Bah va voir le lien que j'ai posté. M'enfin c'est vrai que j'ai pas mis beaucoup d'étoiles à côté, tu l'as sans doute snobé.

  12. #12
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Par défaut
    Je ne l'ai pas snobbé, je l'ai juste déjà vu quelques jours avant que tu n'en proposes le lien. Et c'est un folderbrowserdialog perso et non un filedialog, d'où le fait que ça ne m'intéressait pas.
    Ce que j'ai essayé de faire, c'est de redéfinir les mêmes fonctionnalités qu'un filedialog à partir de la classe immédiatement parente c'est à dire un commondialog (tu vois que je sais me servir de la MSDN ). Seulement je galère à redéfinir ne serait-ce qu'une seule particularité de cette classe ; du coup je me demandais si on pouvait accéder d'une manière ou d'une autre à un filedialog pour découvrir ses méthodes. Si elle est dans le framework, elle doit bien servir à quelque chose !

    En tout cas mea culpa, c'est un peu de ma faute ; en voulant résumer mon soucis j'ai fait des abus de langage !

  13. #13
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Citation Envoyé par Nullos Oracle
    Seulement je galère à redéfinir ne serait-ce qu'une seule particularité de cette classe ; du coup je me demandais si on pouvait accéder d'une manière ou d'une autre à un filedialog pour découvrir ses méthodes.
    Je te suggère un outil très pratique pour voir ce qui se trame derrière .Net : le Reflector

    J'espère que ça t'éclairera.

Discussions similaires

  1. Accès à certains dossiers pour certains utilisateurs
    Par jacksay dans le forum Administration système
    Réponses: 1
    Dernier message: 12/01/2007, 11h46
  2. Comment cacher certains dossiers automatiquement ?
    Par mikool19 dans le forum Apache
    Réponses: 1
    Dernier message: 31/10/2006, 16h50
  3. "Permission denied" sur certains dossiers
    Par mikool19 dans le forum Apache
    Réponses: 3
    Dernier message: 31/10/2006, 13h57
  4. Réponses: 2
    Dernier message: 18/10/2006, 15h09
  5. Réponses: 4
    Dernier message: 21/09/2005, 17h38

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