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 :

Modifier le titre d'un FolderBrowserDialog


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut Modifier le titre d'un FolderBrowserDialog
    Bonsoir,

    Est-il possible de modifier le titre d'un FolderBrowserDialog ?

    En effet il est possible de modifier le sous-titre avec Description mais pas le titre, exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     'Créer un box dialog folder (répertoire)
                Dim objFolderDialog As New FolderBrowserDialog()
                objFolderDialog.Description = "Select the document folder"
                         Dim result As DialogResult = objFolderDialog.ShowDialog()
    Je n'ai pas trouvé d'autre option pour changer le titre.

    En cherchant sur le net j'ai trouvé ce lien intéressant qui nous explique qu'il faut changer avec " P/Invoke and
    send a WM_SETTEXT message to the form to change its title." :

    https://www.pcreview.co.uk/threads/p...title.3682037/

    OK sur le principe.

    Il y a même un code en C# je pense ou en C# ancienne version ?.

    Je ne suis pas arrivé à le transformer en VB.net car il y a déjà des erreurs non résolu dans le code du form. Quelqu'un peut-il m'aider car je ne maitrise hélas pas du tout le C ou C#.

    LE code proposé est :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    1. public partial class Form1 : Form
    2. {
    3. public Form1()
    4. {
    5. InitializeComponent();
    6. }
    7.
    8. public delegate void ChangeTitleDelegate();
    9.
    10. [DllImport("user32.dll", EntryPoint = "SetWindowText", CharSet = CharSet.Ansi)]
    11. public static extern bool SetWindowText(IntPtr hWnd, String strNewWindowName);
    12.
    13. [DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Ansi)]
    14. public static extern IntPtr FindWindow(string className, string windowName);
    15.
    16. private void button1_Click(object sender, EventArgs e)
    17. {
    18. //Change FolderBrowserBox Title.
    19. this.BeginInvoke(new ChangeTitleDelegate(ChangeFolderBrowserBoxTitle));
    20.
    21. //Show FolderBrowserBox
    22. FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
    23. folderBrowserDialog.RootFolder = System.Environment.SpecialFolder.MyComputer;
    24. folderBrowserDialog.ShowDialog();
    25. }
    26.
    27. /// <summary>
    28. /// Change FolderBrowserBox Title.
    29. /// </summary>
    30. private static void ChangeFolderBrowserBoxTitle()
    31. {
    32. bool titleChanged = false;
    33.
    34. TimerCallback timerCallback = delegate
    35. {
    36. try
    37. {
    38. IntPtr ptr = FindWindow(null, "Browse For Folder");
    39. if (ptr != IntPtr.Zero)
    40. {
    41. SetWindowText(ptr, "Hi, i am Tarannum Banu");
    42. titleChanged = true;
    43. }
    44. }
    45. catch (Exception exception)
    46. {
    47. System.Diagnostics.Debug.WriteLine(exception.Message);
    48. }
    49. catch
    50. {
    51. }
    52. };
    53.
    54. System.Threading.Timer timer = null;
    55. try
    56. {
    57. timer = new System.Threading.Timer(timerCallback, null, 500, 500);
    58. while (!titleChanged)
    59. {
    60. System.Windows.Forms.Application.DoEvents();
    61. System.Threading.Thread.Sleep(0);
    62. }
    63. }
    64. catch (Exception exception)
    65. {
    66. System.Diagnostics.Debug.WriteLine(exception.Message);
    67. }
    68. finally
    69. {
    70. if (timer != null) timer.Dispose();
    71. }
    72. }

    Existe-t'il une solution plus simple que cette usine à gaz ?

    Merci pour vos idées et votre aide.
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 112
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 112
    Points : 1 617
    Points
    1 617
    Par défaut
    En mettant la propriété FolderBrowserDialog.UseDescriptionForTitle à true, ça devrait être bon.

  3. #3
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    OK merci pour ta réponse,

    Je regarde cela dans la soirée.

    A+
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  4. #4
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    Bonsoir,

    Voici le nouveau code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Property UseDescriptionForTitle As Boolean
     
    Public Sub LoadFile()
     
    'Créer un box dialog folder (répertoire)
                Dim objFolderDialog As New FolderBrowserDialog()
     UseDescriptionForTitle = True
                objFolderDialog.Description = "Select the document folder"
                         Dim result As DialogResult = objFolderDialog.ShowDialog()
    End sub
    et l'on obtient toujours le titre en français : "Rechercher un dossier" et non pas "Select the document folder" comme je l'ai programmé.

    Une capture d'écran pour illustrer le problème :

    Nom : Capture folder.jpg
Affichages : 272
Taille : 14,4 Ko

    Un système bi-lingue certes mais bon c'est pas top.

    Mon programme est trilingue Anglais Français ou Allemand. Faut-il changer la langue du framework? Si oui comment?

    Que pouvez-vous me proposer ?

    a+
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  5. #5
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    Bonjour

    En relisant la littérature concernant la propriété UseDescriptionForTitle
    je note que cela est possible sous Vista et apparemment quelques autres variantes. Il est écrit :

    "Obtient ou définit une valeur qui indique s’il faut utiliser la valeur de la propriété Description comme titre de boîte de dialogue pour les boîtes de dialogue de style Vista. Cette propriété n’a aucun effet sur les anciennes boîtes de dialogue de style."
    voir : https://learn.microsoft.com/fr-fr/do...owsdesktop-6.0

    Le problème de compatibilité serait-il là ?

    Je travail sous Win 10 pro 64x et .NET Framework version 4.8.04084

    Existe-t'il une routine VB.net ou C# réalisant l'équivalent d'un Folder Browser de meilleur qualité et multi feuille ? Que me proposez-vous?
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 112
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 112
    Points : 1 617
    Points
    1 617
    Par défaut
    Chez moi ça fonctionne,
    juste comme c'est une propriété du FolderBrowserDialog, il faudrait faire précéder la propriété par l'objet concerné (voir ligne 7).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Property UseDescriptionForTitle As Boolean
     
    Public Sub LoadFile()
     
    'Créer un box dialog folder (répertoire)
                Dim objFolderDialog As New FolderBrowserDialog()
                objFolderDialog.UseDescriptionForTitle = True
                objFolderDialog.Description = "Select the document folder"
                         Dim result As DialogResult = objFolderDialog.ShowDialog()
    End sub

  7. #7
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    Bonjour

    Merci. Effectivement si je cré une nouvelle application cela fonctionne parfaitement. Le titre est bien mis en anglais. Par contre sur mon application à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     objFolderDialog.UseDescriptionForTitle = True
    J'ai le code erreur suivant : BC3045 "UseDescriptionForTitle" n'est pas un membre de 'FoderBrowserDialog'
    Donc que conclure? => Cela fonctionne en test mais pas dans un programme existant.

    La version d'essai de ma deuxième fenêtre VS 2022 est sous .NET 6.0 or que mon programme plus ancien est également sous VS 2022 mais fonctionne sous Framework 4.8.
    Donc mon VS2022 est de base programmé en .NET 6.0 quand je cré un nouveau projet => OK. Par curiosité j'ai vérifié que 6.0.100 et 6.0.403 sont bien installé.
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  8. #8
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    La migration de 4.8 vers 6.NET ou 7.NET est une vrai usine à gaz à en lire ce qui suit :

    https://learn.microsoft.com/fr-fr/do...ject-structure

    Où sont les convertisseurs complets? (souvenir de la migration chaotique de VB6 à VB.NET ! )
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  9. #9
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    Je vois que personne n'a d'autre solution à me proposer, je pense notamment à un "Browser Folder" de fabrication maison adaptable à 4.80 mais sur le modèle de celui de 6.0. Mais là hélas je ne sais pas faire. Une idée ?

    J'ai même essayé avec framework 4.81 (dernière version disponible) : le problème reste le même.

    Le point positif : Réécrire des micro programmes de test en 6.0 est une formalité qui prends quelques minutes.

    A vous lire
    La Connaissance est comme le rire elle est contagieuse en la partageant!

Discussions similaires

  1. Peut-on modifier le titre de l'alert
    Par MokhTelnet dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/05/2010, 10h46
  2. Réponses: 15
    Dernier message: 06/12/2005, 17h41
  3. Réponses: 2
    Dernier message: 06/12/2005, 17h20
  4. Réponses: 4
    Dernier message: 24/11/2005, 14h18
  5. Modifier le titre des colonnes d'une DBGrid
    Par deubal dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/11/2005, 17h15

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