Position relative formulaire par rapport au formulaire principal en temps réel [Résolu]

Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
-
Bonjour,
Voici mon soucis:
Comment positionner (en relatif) un formulaire (ouvert grâce au formulaire principal) par rapport au formulaire principal (qui reste constamment affiché bien sûr) ?

Voici ce que j'ai fait:

    Private Sub BtnValD_Click(sender As Object, e As EventArgs) Handles BtnVal.Click
        Me.Size = New Size(300, 0)
        Me.Left = Fprincipale.Right - 380
        Me.Top = Fprincipale.Top + 400

    End Sub


Cela permet de réduire mon formulaire et le place par rapport au form.principal mais si je déplace ou modifie la taille du FPrincipal il ne suit pas en temps réel (comme un contrôleur).

Peut-on faire un comportement type "anchor" entre des formulaires ?

Merci pour votre aide.
Afficher la suite 

Votre réponse

8 réponses

Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
79
0
Merci
bonjour,

Comme ceci:

Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "Ouvrir Form2"
    End Sub
    Private Sub Form1_LocationChanged(sender As Object, e As EventArgs) Handles MyBase.LocationChanged, MyBase.ResizeEnd
        PositionForm2()
    End Sub
    Private Sub PositionForm2()
        Form2.Top = Me.Top 'Form2 est à la même hauteur que Form1
        Form2.Left = Me.Left + Me.Width 'Form2 est à droite de Form1
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Form2.Show()
        PositionForm2()
    End Sub
End Class

Commenter la réponse de cs_Le Pivert
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
Bonjour,
cela fonctionne mais pas avec mon projet:

La form1 est la principale (ouverte plein écran)
un bouton (sur form1) ouvre la form2 pour la remplir)
un bouton (sur form2) diminue la taille de la form2 et la place à l'endroit indiqué sur mon premier message.

Pour ceci mon code fonctionnait.

Mais si je réduit, change la taille ou déplace mon form1, la 2 ne suit pas.


J'ai bien essayé "Handles MyBase.LocationChanged, MyBase.ResizeEnd" mais la form2, dès sa première ouverture s'y précipite et je ne peux pas remplir ce qu'il y a dedans.


L'autre soucis est que si je clique sur la form1 la 2 disparaît en dessous (ce qui est normal mais pas ce que je désire): j'ai essayé "TopMost" mais aucun autre logiciels ne peut alors se mettre devant!
cs_Le Pivert
Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
79 -
chez moi cela fonctionne avec ton code:

Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "Ouvrir Form2"
    End Sub
    Private Sub Form1_LocationChanged(sender As Object, e As EventArgs) Handles MyBase.LocationChanged, MyBase.ResizeEnd
        PositionForm2()
    End Sub
    Private Sub PositionForm2()
        Form2.Top = Me.Top 'Form2 est à la même hauteur que Form1
        Form2.Left = Me.Left + Me.Width 'Form2 est à droite de Form1
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Form2.Show()
        PositionForm2()
    End Sub
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Me.Size = New Size(300, 0)
        Me.Left = Form2.Right - 380
        Me.Top = Form2.Top + 400
    End Sub
End Class
cs_Le Pivert
Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
79 -
Mais si je réduit, change la taille ou déplace mon form1, la 2 ne suit pas.

et même en mettant le code dans un button du Form2 cela fonctionne!

 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Me.Size = New Size(300, 0)
        Me.Left = Form1.Right - 380
        Me.Top = Form1.Top + 400
    End Sub


j'ai du louper quelque chose!
Commenter la réponse de paulhochon
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
Voilà une petit illustration:
Ton code fait presque ce que je voudrais sauf:
l'ancrage du form2 à l'ouverture doit être au centre du form1
lors du "retrécissement" du form2 (via le boutton 2 situé sur celui-ci), le form se place bien là ou je le veux
mais lors du déplacement du form1, le form2 réduit repasse à son point d'ancrage (et comme celui-ci se trouve dans la zone du form1, le form2 repasse derrière et devient caché) !
cs_Le Pivert
Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
79 -
C'est normal puisque tu as ce code!

 Private Sub PositionForm2()
        Form2.Top = Me.Top 'Form2 est à la même hauteur que Form1
        Form2.Left = Me.Left + Me.Width 'Form2 est à droite de Form1
    End Sub


C'est à toi de modifier ce code selon tes besoins
paulhochon
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
-
Oui je comprends bien.
C'était juste pour repartir de ton exemple.

Il reste ce problème que je ne résous pas:

lors du déplacement du form1, le form2 réduit repasse à son point d'ancrage car on active le form1 (et comme celui-ci se trouve dans la zone du form1, le form2 repasse derrière et devient caché) alors que je voudrais qu'il reste (en relatif par rapport au form1) à son dernier emplacement et devant le form1!
cs_Le Pivert
Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
79 -
essaie ceci:

   Private Sub PositionForm2()
        Form2.Top = Me.Top  'Form2 est à la même hauteur que Form1
        Form2.Left = CInt(Me.Left + Me.Width / 2)
        Form2.TopMost = True
    End Sub


j'ai essayé "TopMost" mais aucun autre logiciels ne peut alors se mettre devant!

Si tu expliquais la finalité de ton projet, on pourrait t'aider davantage. Il y a certainement une autre approche!
Commenter la réponse de paulhochon
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
Je pense avoir trouvé.
Il fallait que je conditionne via le boutton.

Pour le form1:

Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "Ouvrir Form2"
    End Sub
    Private Sub Form1_LocationChanged(sender As Object, e As EventArgs) Handles MyBase.LocationChanged, MyBase.ResizeEnd
        PositionForm2()
    End Sub
    Private Sub PositionForm2()
        If Form2.button2clic Then
            Form2.Top = Me.Top + 300
            Form2.Left = Me.Left + 300
        End If
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Form2.Show()
        PositionForm2()
    End Sub


End Class



Et pour le form2:

Public Class Form2

    Public button2clic As Boolean = False
    Public Sub button2_clic(sender As Object, e As EventArgs) Handles Button2.Click

        button2clic = True

    End Sub


    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Me.Size = New Size(300, 0)
        Me.Left = Form1.Left + 300
        Me.Top = Form1.Top + 300
    End Sub

    Friend Shared Sub center()
        Throw New NotImplementedException()
    End Sub
End Class
Commenter la réponse de paulhochon
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
Par contre j'ai toujours le soucis de gestion de la visualisation des form (genre calques photoshop ou autres).
Dans mon exemple j'ai mis le form2 à "topmost".
cs_Le Pivert
Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
79 -
Pour la transparence, voir ce programme qui peut être adapter à un Form:

https://codes-sources.commentcamarche.net/source/49500-transparence-textbox-et-picturebox

@+
Commenter la réponse de paulhochon
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
Ce n'est pas la transparence que je cherche mais pouvoir placer des form sur un autre en choisissant les priorités.
Un peu comme le "topmost" sauf qu'il donne la priorité à un form et que si on ouvre un autre logiciel, le form reste devant (ce que je ne veut pas)!

Si tu connais Photoshop; c'est le même principe que je cherche à avoir: les palettes sont flottantes et sont toujours devant la photo mais, un autre logiciel peut se placer en avant.
Commenter la réponse de paulhochon
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
Je laisse le post ouvert si quelqu'un a une solution.


En tout cas merci "cs_Le Pivert" d'avoir dialoguer avec moi et de m'avoir fait réfléchir à des pistes.
Commenter la réponse de paulhochon
Messages postés
35
Date d'inscription
samedi 15 décembre 2018
Statut
Membre
Dernière intervention
15 janvier 2019
0
Merci
Trouvé:

 Me.AddOwnedForm(Form2)
        Form2.Show()
Commenter la réponse de paulhochon