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 :

Place occupée à l'écran par un formulaire


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut Place occupée à l'écran par un formulaire
    Bonjour.
    Je voudrais savoir comment prévoir le rectangle occupé à l'écran par un formulaire, connaissant ses propriétés Location, Size, et FormBorderStyle.

    Merci d'avance.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    c'est à dire ?
    dans quel but ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonsoir Jean-Marie Grave,

    J'ai du mal à comprendre votre question, qu'entendez-vous par "prévoir"?

    EDIT : Pol63 est toujours le plus rapide

  4. #4
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonsoir.

    Après avoir afficher un formulaire, je voudrais savoir en afficher un autre ayant, par exemple, un bord vertical commun. Si j'essaie de faire cela en utilisant les propriétés Location et Size, les formulaires se chevauchent. J'en déduit, peut être à tort, que la place occupée à l'écran par un formulaire est plus grande que celle indiquée par Size.

    Pouvez-vous me dire si je me trompe, ou sinon quel décalage il faut mettre pour que les formulaires soient jointifs ?

    Merci d'avance.

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Je viens d'essayer rapidement avec 2 formulaires et il se juxtapose bien au pixel pret avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            frm2.Left = frm1.Left + frm1.Width
            frm2.Top = frm1.Top

  6. #6
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonsoir Sankasssss.

    Moi aussi j'obtiens ça, mais avec le style Sizable.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    il y a les bordures de fenêtres qui peuvent changer selon le border style, surtout en haut je dirais
    mais ca dépend aussi du paramétrage de windows, où l'on peut augmenter les tailles des barres
    avec le borderstyle à none tu dois pouvoir être précis facilement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonjour Pol63.

    Je viens de vérifier pour les sept styles. C'est jointif pour tous les styles, sauf pour ceux qui sont "Fixed". Alors, ce que je voudrais avoir, c'est la loi générale qui me permettrais d'être jointif à tous les coups. Par exemple, une loi qui donnerais le rectangle affiché à l'écran en fonction de Left, Top, Width, Height, et FormBorderStyle. On doit bien pouvoir trouver ça quelque part. J'ai cherché, mais je n'ai rien trouvé.

  9. #9
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    J'ai rapidement cherché et je n'ai rien trouvé non plus.
    Les seules choses trouvées se situent au niveau de ClientRectangle et DisplayRectangle. Il faudrait regarder la différence entre les deux mais je n'ai malheureusement pas le temps d'aller plus loin. En espérant que tu trouveras.

    Bonne nuit.

  10. #10
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonjour Sankasssss.

    J'ai testé la propriété DisplayRectangle. Elle donne des cotes inférieures à celles fournies par Size, et ne convient donc pas pour ce que je cherche à faire, à savoir maîtriser le placement relatif des formulaires à l'écran.

    Merci en tous cas d'avoir cherché à m'aider, ainsi qu'à Pol63.

  11. #11
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Vite refait une petite expérimentation et ça a l'aire de tenir la route :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable
            Dim _location As Point = Me.PointToScreen(Me.ClientRectangle.Location)
            Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Fixed3D
            Dim _newlocation As Point = Me.PointToScreen(Me.ClientRectangle.Location)
            Dim _diff As Size = New Size(_newlocation) - New Size(_location)
            Debug.WriteLine(_diff.ToString)
            ' frm2.Left = frm1.Left + frm1.Width + (Math.Abs(_diff.Width) * 4) ' petit décalage avec cette méthode
            frm2.Left = frm1.PointToScreen(frm1.DisplayRectangle.Location).X + frm1.DisplayRectangle.Width + (Math.Abs(_diff.Width) * 4) ' ca à l'aire de marcher
    Le décalage est de 12 pixels dans mon cas

  12. #12
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour Jean-Marie Grave

    Mais tu n'as qu'as gerer ton 2eme form correctement dans le 1er form:
    -event sizechanged
    -event shown
    -event move
    mais les 2 forms se positionnent correctement comme dit par Paul...
    voici un code :
    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
     
    Public Class Form1
        Private frm As formACote = New formACote
     
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
     
            ListBox1.Dock = DockStyle.Left
            Dim arr As Array = FormBorderStyle.GetValues(GetType(FormBorderStyle))
            For i As Integer = 0 To arr.Length - 1
                ListBox1.Items.Add(arr(i))
     
     
            Next
            Me.FormBorderStyle = FormBorderStyle.Sizable
            Me.BackColor = Color.AntiqueWhite
     
            '2eme form
            frm = New formACote
            formACote.FormBorderStyle = Me.FormBorderStyle
            formACote.BackColor = Color.Thistle
        End Sub
     
        Private Sub ListBox1_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedValueChanged
            Me.FormBorderStyle = ListBox1.SelectedItem
            'maj 
            formACote.FormBorderStyle = Me.FormBorderStyle 'ajuste  borderstyle
            formACote.Left = Me.Right
            formACote.Top = Me.Top
            formACote.Size = Me.Size
     
     
        End Sub
     
        Private Sub Form1_Move(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Move
            'maj
            formACote.Left = Me.Right
            formACote.Top = Me.Top
        End Sub
     
        Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
            'maj
            formACote.Show()
            formACote.FormBorderStyle = Me.FormBorderStyle 'ajuste  borderstyle
            formACote.Left = Me.Right
            formACote.Top = Me.Top
            formACote.Size = Me.Size
        End Sub
     
        Private Sub Form1_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
            'maj
            formACote.Left = Me.Right
            formACote.Top = Me.Top
            formACote.Size = Me.Size
     
        End Sub
    End Class
    Maintenant si tu veux superposer la bordure "veticale" du 2eme form(formACote) au 1er form il faut utiliser le shared class SystemInformation qui fournit les infos systeme courantes sur les controls :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     'Obtient l'épaisseur, en pixels, de la bordure d'une fenêtre qui contient une légende et n'est pas redimensionnable
    formACote.Left = Me.Right - SystemInformation.FixedFrameBorderSize.Width
     
     'Obtient l'épaisseur, en pixels, de la bordure de redimensionnement autour d'une fenêtre redimensionnée
            formACote.Left = Me.Right - SystemInformation.FrameBorderSize.Width
    bon code.............

  13. #13
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonsoir Sankasasssss.

    J'ai testé votre code, en donnant aux formulaires frm1 et frm2 le style Sizable. Avec la première formule, j'ai mesuré entre les deux formulaires un écart de 12 pixels. Avec la deuxième, il reste un écart de 4 pixels. J'en ai ajouté une troisième, en remplaçant DisplayRectangle par ClientRectangle, ce qui n'a rigoureusement rien changé.
    Désespérant de trouver une formule exacte, j'ai décidé de mesurer les différences entre les cotes nominales et les cotes d'affichage. Et voici ce que j'ai trouvé :

    a) Pour les styles dont la dénomination ne contient pas la syllabe "Fixed", aucune différence.
    b) Pour les autre styles, le passage du nominal à l'affichage diminue Left et Top de 5 pixels, et augmente Width et Height de 10 pixels.

    Cordiales salutations.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/07/2010, 16h59
  2. affichage plein écran d'un formulaire
    Par le géologue dans le forum IHM
    Réponses: 6
    Dernier message: 17/10/2005, 10h29
  3. Réponses: 3
    Dernier message: 12/09/2005, 16h38
  4. Réponses: 5
    Dernier message: 27/12/2004, 00h38
  5. Réponses: 4
    Dernier message: 18/09/2003, 10h06

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