2016-11-10 3 views
0

J'ai une forme de parent appelé MDIForm1 en son sein que j'ouvre frm1 qui est une forme d'enfant. Donc, tout est grand à ce moment - maintenant je dois ouvrir un autre formulaire dans frm1 - Appelons que frmX et est là où ma question se pose - je l'avais déjà déclaré comme forme MDIChild, et a fait mdichild.show - mais la question est parce que lorsque ce formulaire s'ouvre (il couvre environ 1/3 de frm1 - qui est déjà ouvert) et l'utilisateur clique en dehors de la frmX - il disparaît simplement. J'ai donc essayé de .showDialog() mais je suis incapable de le faire car ce n'est pas un niveau supérieur et c'est un mdiChild qui ne me laisse donc pas .showdialog(). voici mon code ...Formes enfant et parent forme non-concordance dans Vb.net

Private Sub cmd1_Click(sender As Object, e As EventArgs) Handles cmd1.Click 

    Dim NewMDIChild As New Frmx() 

    'Set the Parent Form of the Child window. 
    NewMDIChild.MdiParent = MDI1 

    'Display the new form 
    NewMDIChild.ShowDialog() 

    NewMDIChild.Top = 310 
    NewMDIChild.Left = 36 
    NewMDIChild.Width = 897 
End Sub 

Je reçois cette erreur sur .showDialog() et voici ce qu'il dit ....

formulaire qui est pas une forme de haut niveau ne peut pas être affiché sous la forme une boîte de dialogue modale . Supprimez le formulaire de n'importe quel formulaire parent avant d'appeler showDialog.

J'ai essayé de déclarer le frmX comme celui-ci ....

dim frmX as New Form 
frmX.showDialog 

'specifying Top/Left/Width but that doesn't do anything, basically opens an empty form elsewhere on the screen. 

EDIT: Il est un peu déroutant:/

Voici ce que je faisais - obtenir la même erreur. C'est dans frm1 que l'on clique sur le bouton qui est supposé OUVRIR frmX en modal pour que les utilisateurs qui cliquent sur frm1 ne fassent pas disparaître frmX. Il ouvre au bon endroit mais quand je clique sur elsewher frm1 --- frmX disparaît

Dim frmxName As New FrmX() 
    frmxName.MdiParent = Me.MdiParent 
    frmxName.ShowDialog() 
    frmxName.Top = 310 
    frmxName.Left = 36 
    frmxName.Width = 897 

Mon but est d'avoir frmX ouvert jusqu'à ce qu'ils près là-dessus!

Répondre

1

Set parent MDI du nouveau formulaire au parent de formulaire de contrôle MDI

Dans le parent MDI j'ai appelé Form1. Cette forme a la propriété IsMdiContainer = True

Public Class Form1 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Dim myFrmX As New frmX 
     myFrmX.MdiParent = Me 
     myFrmX.Show() 
    End Sub 

End Class 

Et frmX avec un bouton sur elle

Public Class frmX 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim f As New Form 
     f.MdiParent = Me.MdiParent 
     f.Text = "frmY" 
     f.Show() 
    End Sub 

End Class 

En cliquant sur le bouton crée de nouvelles formes, qui sont présentés comme des enfants MDI de la principale forme ci-dessous

enter image description here

Ou si vous voulez juste une fenêtre de dialogue, renoncer à l'entreprise MDI, et juste montrer dialogue

Public Class frmX 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim f As New Form 
     f.Text = "frmY" 
     f.ShowDialog() 
    End Sub 

End Class 

Maintenant, frmY a le focus jusqu'à ce qu'il soit fermé.

enter image description here

+0

que dois-je faire avec le reste du code en termes de spécification haut/gauche et ce – BobSki

+0

aussi, ce Button_Click est sur mon frm1 - alors dois-je inclure ce code dans l'événement de chargement frmX? – BobSki

+1

C'est un peu déroutant, puisque vous avez utilisé des noms différents pour les classes dans votre exemple. Le principe est que si vous avez un enfant MDI frmX, il peut créer un nouveau formulaire frmY et définir le parent MDI de ce formulaire sur le parent de frmX.Les questions dans vos commentaires semblent être hors sujet – djv