Position relative formulaire par rapport au formulaire principal en temps réel

Résolu
paulhochon Messages postés 35 Date d'inscription samedi 15 décembre 2018 Statut Membre Dernière intervention 15 janvier 2019 - Modifié le 17 déc. 2018 à 16:20
paulhochon Messages postés 35 Date d'inscription samedi 15 décembre 2018 Statut Membre Dernière intervention 15 janvier 2019 - 23 déc. 2018 à 15:05
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.

8 réponses

cs_Le Pivert Messages postés 7884 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 20 mars 2023 137
17 déc. 2018 à 18:25
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

0
paulhochon Messages postés 35 Date d'inscription samedi 15 décembre 2018 Statut Membre Dernière intervention 15 janvier 2019
Modifié le 20 déc. 2018 à 11:31
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!
0
cs_Le Pivert Messages postés 7884 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 20 mars 2023 137
20 déc. 2018 à 12:13
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
0
cs_Le Pivert Messages postés 7884 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 20 mars 2023 137
20 déc. 2018 à 13:43
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!
0
paulhochon Messages postés 35 Date d'inscription samedi 15 décembre 2018 Statut Membre Dernière intervention 15 janvier 2019
Modifié le 20 déc. 2018 à 14:27
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é) !
0
cs_Le Pivert Messages postés 7884 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 20 mars 2023 137
20 déc. 2018 à 14:21
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
0
paulhochon Messages postés 35 Date d'inscription samedi 15 décembre 2018 Statut Membre Dernière intervention 15 janvier 2019
20 déc. 2018 à 14:43
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!
0
cs_Le Pivert Messages postés 7884 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 20 mars 2023 137
Modifié le 20 déc. 2018 à 15:27
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!
0
paulhochon Messages postés 35 Date d'inscription samedi 15 décembre 2018 Statut Membre Dernière intervention 15 janvier 2019
Modifié le 20 déc. 2018 à 15:27
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
paulhochon Messages postés 35 Date d'inscription samedi 15 décembre 2018 Statut Membre Dernière intervention 15 janvier 2019
20 déc. 2018 à 15:28
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".
0
cs_Le Pivert Messages postés 7884 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 20 mars 2023 137
20 déc. 2018 à 15:35
Pour la transparence, voir ce programme qui peut être adapter à un Form:

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

@+
0
paulhochon Messages postés 35 Date d'inscription samedi 15 décembre 2018 Statut Membre Dernière intervention 15 janvier 2019
20 déc. 2018 à 15:44
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.
0
paulhochon Messages postés 35 Date d'inscription samedi 15 décembre 2018 Statut Membre Dernière intervention 15 janvier 2019
20 déc. 2018 à 16:51
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.
0
paulhochon Messages postés 35 Date d'inscription samedi 15 décembre 2018 Statut Membre Dernière intervention 15 janvier 2019
Modifié le 23 déc. 2018 à 15:06
Trouvé:

 Me.AddOwnedForm(Form2)
        Form2.Show()
0
Rejoignez-nous