2016-11-10 25 views
0

親フォームがMdiForm1という名前で、子フォームであるfrm1を開きます。今のところfrm1の中で別のフォームを開く必要があります - frmXと呼ぶことができます。ここで私の問題が発生しています - 以前はmdichild形式と宣言していましたが、mdichild.showでした。このフォームが開くと(すでに開いているfrm1の約1/3をカバーします)、ユーザーがfrmXの外側をクリックすると、単に消滅します。だから私は.showDialog()にしようとしましたが、トップレベルではないので、それを行うことができません。したがって、mdiChildは私に.showdialog()をさせません。ここに私のコードでは、トップレベルのフォームではありません子フォームと親フォームがVb.netで一致しない

フォームとして表示することはできません....私は(.showDialogでこのエラーを取得)し、ここでそれが言うことだ...

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 

ですモーダル ダイアログボックス。 showDialogを呼び出す前に、親フォームからフォームを削除してください。

私はこのようなfrmXを宣言しようとした....

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. 

編集:それは少し紛らわしいです:/

これは私がやったことである - 同じエラーを取得します。これは、frmXを消さないようにfrm1をクリックしたユーザーがモーダルでOPEN frmXを使用すると考えられるボタンクリック時のfrm1にあります。それは私がFRM1にelsewherクリックすると、しかし--- frmXは、彼らはそれに近いクリックするまで

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

私の目標は、オープンfrmXを持つことで消え、右の場所にオープン!

答えて

1

私はForm1のと呼ばれるMDIの親で制御フォームのMDI親

に新しいフォームのMDIの親を設定します。この形式は、真のプロパティIsMdiContainer =を持って

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 

そしてボタンが

下記のメインフォームのMDI子になることが示されている新しいフォームを作成しますクリックする

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 

上のボタンでfrmXで

あなただけのダイアログウィンドウをしたい場合は

enter image description here

または、MDI事業を見送る、とだけ対話

を表示
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 

frmYはフォーカスが閉じられるまでフォーカスします。

enter image description here

+0

私はまた – BobSki

+0

左/トップなどを指定するという点で残りのコードで行うのですか、このbutton_clickは私FRM1である - ので、私はfrmXロードイベントでこのコードが含まれていますか? – BobSki

+1

あなたの例ではクラスに異なる名前を使用しているので、少し混乱します。原則として、MDIの子frmXを持つ場合、新しいフォームfrmYを作成し、そのフォームのMDIの親をfrmXの親に設定することができます。あなたのコメントの質問は、オフトピックと思われる – djv

関連する問題