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# NET 2.0] Comment redimensionner une fenêtre en fct de la résolution d'écran ?


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 10
    Points
    10
    Par défaut [C# NET 2.0] Comment redimensionner une fenêtre en fct de la résolution d'écran ?
    Je cherche à redimensionner automatiquement toutes mes fenêtres (formes) en fonction de la résolution de l'écran.

    J'ai réalisé un prg dans une résolution élevée (1024). Malheureusement, les utilisateurs de mon programme ne peuvent pas avoir une résolution supérieure à 1024.

    Comment détecter automatiquement la configuration écran de l'utilisateur et utiliser la surface maximale de l'écran (fullscreen) ? ou permettre un redimensionnement automatique si on agrandit ou réduit la taille d'un "Form". Je suis allé chez msdn pour essayer de comprendre ce qu'il faut faire. Je n'ai malheureusement rien compris.

    http://msdn2.microsoft.com/en-us/library/ms229605.aspx

    Il existe des fonctions comme celles ci-dessous mais je ne comprends pas comment m'y prendre:
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
    T4Dryer_Main.ActiveForm.PerformAutoScale();


    Y-a-t-il une bonne âme qui pourrait me fournir une explication (ou exemple) pour résoudre mon problème MERCI

    Programmation en Visual Studio 2005 C# Framework 2.0

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    AutoScale, pour moi, ça permet de modifier la taille de la Form en fonction de la police. Un rapide coup d'oeil sur la doc du SDK me le confirme, mais je ne suis pas un expert.

    Sinon, pour connaitre la taille de l'écran : SystemInformation.PrimaryMonitorSize
    Après si tu as deux écrans, je sais pas

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 10
    Points
    10
    Par défaut y a t il une solution ?
    J'ai qu'un seul écran, mais plusieurs stations installés avec mon programme dont certaines ont 1 petit écran qui ne permet pas la résolution de base (1280x1024). Il faut donc pouvoir redimensionner ma Forme pour qu'elle ne dépasse pas de la taille écran utilisateur (1024x768)

    Je programme aussi de temps en temp en CVI (National) et la possibilité d'étendre la Forme existe. Ca déforme un peu le texte si on ne garde pas les mêmes proportions.

    N'y a t-il pas de codes similaires pour le C#. J'ai passé plusieurs heures sur le web à la recherche d'un exemple ou d'une explication claire, sans succès.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2006
    Messages : 27
    Points : 34
    Points
    34
    Par défaut !
    As-tu essayé d'ajouter

    _currentForm.WindowState = FormWindowState.Maximized;

    après le .Show ou .ShowDialog de ta fenêtre ?

    Avec cette commande, ta fenêtre prendra la taille maximale qu'elle puisse avoir dans la résolution d'affichage en cours.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Si seulement c'était aussi simple !!!
    Merci pour ton soutien mais la fonction Maximized étend ta dialogbox en pleine page sans agrandir le contenu.

    C'est à dire que tu auras bien ta page sur tout l'écran mais tous tes composants gardent la même taille. Il y a donc plein de vide à droite de ta dialogue box car la référence est le point 0.0 (haut gauche de la page).

    Moi je voudrait pouvoir changer la taille de ma dialogue box et qu'automatiquement le contenu à l'intérieur s'adapte. C'est sûr que le texte risque d'être déformé si on ne tient pas l'échelle (augmentation/diminution X et Y dans les mêmes proportions).

    Je suis sûr que c'est possible de le faire mais je ne trouve aucune doc à ce sujet. Je ne désespère pas

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 10
    Points
    10
    Par défaut je veux la fonctiojn inverse
    C'est l'inverse que j'ai besoin, c'est-ta-dire je veux modifier la police de mon texte en fonction de la taille de la Form.



    Citation Envoyé par Mose
    AutoScale, pour moi, ça permet de modifier la taille de la Form en fonction de la police. Un rapide coup d'oeil sur la doc du SDK me le confirme, mais je ne suis pas un expert.

    Sinon, pour connaitre la taille de l'écran : SystemInformation.PrimaryMonitorSize
    Après si tu as deux écrans, je sais pas

  7. #7
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Pour être sûrs qu'on se comprend :
    * Quand tu agrandis ta fenêtre, tu veux que son contenu s'agrandisse.

    C'est tout ?
    Tu connais la propriété Dock de Control ? Ou la propriété Anchor ?

    * Agrandir la police
    Nan ça je crois pas que ça existe. Ceci dit, ça s'implémente assez facilement :
    1 - tu hardcode une table de conversion, genre :
    * en dessous de 801 pixels : taille 10
    * entre 801 et 1025 pixels : taille 12, etc...)
    2 - quand tu charges l'application, tu changes la police de la Form en fonction de la taille de l'écran
    3 - dans tes contrôles, tu vérifie bien qu'ils utilisent, au chargement, la police de la Form parente.

    Avantage : les textboxes/labels seront initialisés à la bonne taille directement, pas besoin de se casser la tête. Mais faut bien changer la police avant de charger tous les contrôles.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 10
    Points
    10
    Par défaut pas de solution embarquée !!
    A force de glaner des informations, je constate qu'il existe bien des méthodes (Anchor et Dock) pour positionner mes éléments et les étirer si besoin, mais c'est bien compliqué. Surtout que je dois encore redimensionner la taille du texte manuellement.

    National (CVI) à une longeur d'avance à ce niveau là. Je pensais m'en tirer avec une seule fonction qui s'appellerait par exemple "fit to screen". Cette fonction déformerait un peu les éléments si l'on ne respecte pas les proportions.

    Avec Dock & Anchor j'arrive à redimensionner ma page graphique. Un seul graphe au centre de ma forme et 2 textes en haut au milieu. Cela ne change pas la taille du texte, mais c'est pas important.

    Par contre ma page principale qui est plus complexe, comporte 4 tableaux datagriview un jeu de textbox et de checkbox. Ecrire du code comme je l'ai compris pour que le contenu de ma forme soit toujours dans les mêmes proportions si je la redimensionne n'est pas chose simple. Par exemple pour un Datagridview il faut en plus changer manuellement la taille du texte en fct de la résolution souhaitée et trouver la nouvelle position pour cet élément dans la forme.

    Dans ce cas autant créer plusieurs pages principales avec une résolution différente et appeler au démarrage la page qui correspond le mieux en fct de la configuration de la taille de l'écran en cours (SystemInformation.PrimaryMonitorSize)

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par mbeuret
    A force de glaner des informations, je constate qu'il existe bien des méthodes (Anchor et Dock) pour positionner mes éléments et les étirer si besoin, mais c'est bien compliqué.
    Compliqué ? Ah merde.... tu derais arrêter l'info, paske là tout risque d'être trop compliqué pour toi
    T'as regardé 'Anchor' dans le designer de VS.Net ? Plus con, je vois pas.

    Pour redimensionner la taille du texte, relis bien mon post précédent, ça peut se faire en une ligne : tu modifies la Font par défaut de ta Form avant de créer tous tes contrôles, et le reste se fera automatiquement. (Sauf erreur de ma part).

    Si erreur de ma part, alors ça demande un peu plus de boulot puisqu'il faut effectivement modifier la font de chaque contrôle avant de l'ajouter à son contrôle contenant.

    Citation Envoyé par mbeuret
    Dans ce cas autant créer plusieurs pages principales avec une résolution différente et appeler au démarrage la page qui correspond le mieux en fct de la configuration de la taille de l'écran en cours (SystemInformation.PrimaryMonitorSize)
    C'est une solution. Assez barbare, mais c'est une solution.
    Ca te fera juste trois fois plus de boulot quand tu voudras modifier un élément de ton écran, mais pourquoi pas. L'avantage c'est que tu peux faire une présentation personnalisée en fonctione de la résolution.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Ok Ok
    Ok je disais compliqué dans le sens ça va prendre un peu de temps
    (j'espère pouvoir encore programmer un peu c'est une partie de mon gagne pain).

    Effectivement changer le Font de la Forme principale, force tous les éléments à cette taille et demande un moindre effort . Mais Il faut quand même traiter les dimensions de chaque datagriview sinon je vais avoir une zone trop grande ou trop petite réservée pour chaque élément (zone grisée perdue ou affichage de la scrollBar parce la taille n’est plus assez grande. Dock n’est utilisable que si je définis des groupesBox autour de chaque élément, sinon ça considère toute la Forme. Pour faire cela proprement je vais redéfinir chaque taille des datagriviews en fct de la config écran. Mon idée de faire 3 formes avec pour chaque configuration était aussi mal exprimée. Je peux très bien avant le showdialog redéfinir chaque position, élément, taille du texte en fonction de la résolution de l’écran. Pour une question de rapidité, je voulais simplement positionner dans une forme test (par résolution) mes éléments de manière visuelle et reporter les valeur dans ma procédure d’initialisation (la manière à mon avis la plus rapide de positionner du premier coup les éléments comme on le désir)



    Ce qui m'agasse le plus c'est le temps que je passe pour la mise en forme de mon programme alors que la partie la plus complexe, calculs et fonctionnalités je les ai réglés en 2 temps 2 mouvements.



    Merci pour ton aide

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Perso, je découpe systématiquement mes interface en "groupes de contrôles".
    Genre :
    * un menu avece des boutons en haut
    * un "explorer" composés :
    * * d'un treeview à droite
    * * une listbox à gauche
    * une toolbar à droite
    etc...

    J'utilise des Panels dans lesquels je colle les sous contrôles.
    J'attache mes panels par rapport à la fenêtre et mes sous-contrôles par rapport aux panels.

    Quand tu appliques la méthode dès le début, l'interface prend autant de temps à développer qu'une interface sans ce découpage. Pas grave, c'est du temps de gagner pour ta prochaine interface

    Autre avantage : tu peux découper mon appli en plein de petits contrôles que je peux réutiliser dans d'autres appli par la suite (bon oki, ça prend un peu plus de temps à développer)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/08/2008, 09h49
  2. [VB.NET] Comment ouvrir une fenêtre modale avec Thread ?
    Par Damien10 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/11/2006, 11h28
  3. [JFrame] Comment ouvrir une fenêtre maximiser
    Par dadg dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 11/12/2004, 18h38
  4. Comment fermer une fenêtre quand la souris et clavier sont inactifs ?
    Par Goldenkiller dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/12/2004, 22h09
  5. [eclipse][plugin] Comment avoir une fenêtre avec focus
    Par relivio dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/04/2004, 15h54

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