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.
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.
Bonsoir Jean-Marie Grave,
J'ai du mal à comprendre votre question, qu'entendez-vous par "prévoir"?
EDIT : Pol63 est toujours le plus rapide![]()
Règles du forum + Comment utiliser Developpez.com =
Découvrez le magazine gratuit de Developpez.com
Si vous développez en .NET, la FAQ, les tutos et l'aide MSDN sont vos amis !!!
Dvp.NET, la librairie .NET open source de Developpez.com
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.
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
Règles du forum + Comment utiliser Developpez.com =
Découvrez le magazine gratuit de Developpez.com
Si vous développez en .NET, la FAQ, les tutos et l'aide MSDN sont vos amis !!!
Dvp.NET, la librairie .NET open source de Developpez.com
Bonsoir Sankasssss.
Moi aussi j'obtiens ça, mais avec le style Sizable.
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![]()
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é.
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.
Règles du forum + Comment utiliser Developpez.com =
Découvrez le magazine gratuit de Developpez.com
Si vous développez en .NET, la FAQ, les tutos et l'aide MSDN sont vos amis !!!
Dvp.NET, la librairie .NET open source de Developpez.com
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.
Vite refait une petite expérimentation et ça a l'aire de tenir la route :
Le décalage est de 12 pixels dans mon cas
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
Règles du forum + Comment utiliser Developpez.com =
Découvrez le magazine gratuit de Developpez.com
Si vous développez en .NET, la FAQ, les tutos et l'aide MSDN sont vos amis !!!
Dvp.NET, la librairie .NET open source de Developpez.com
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 :
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
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
bon code.............
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
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.
Partager