2016-06-29 28 views
2

これは私の最初の疑問の投稿で、どのサイトでも、あなたが私を助けることで私を歓迎することを願っています。私はソフトウェアのメニューとして私のメインフォームでツリービューを使用しているvb.netのWindowsアプリケーションに取り組んでいます。私はenterを押すか、treenodesをクリックして新しいフォームを開くようにしています。私はtreenodeでenterを押すとすべてうまく動作しますが、メインフォームの背後にあるtreenodeの新しいフォームをクリックすると動作します。メインフォームの前に新しいフォームを表示する方法を教えてください(TopMostプロパティを設定するか、MDIParentは私のアプリケーションには適切ではありません)。事前に おかげフォームが開いているときにフォームが開いたときにtreenodeclick

Private Sub TreeView1_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick 
    If e.Node.Text = "Purchase" Then 
      Dim frm As New frm_purchase 
      frm.Show() 
    End If 
End Sub 

Private Sub TreeView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TreeView1.KeyDown 
     If e.KeyData = Keys.Enter Then 
      If TreeView1.SelectedNode.Text = "Purchase" Then 
       Dim frm As New frm_purchase 
       frm.Show() 
      End If 
     End If 
End Sub 
+0

試してみてください。frm.BringToFront() – Bugs

+0

これはMDIフォームの親であり、子供はメインフォーム? –

+1

新しいフォームの '.Owner'プロパティを設定してみてください。 –

答えて

1

フォームの所有者を示すために.Show()方法has one overload。デフォルトの代わりにこれを使用してみてください:

この場合
Private Sub TreeView1_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick 
If e.Node.Text = "Purchase" Then 
     Dim frm As New frm_purchase 
     frm.Show(ParentForm) 
End If 

ParentForm、あなたのMDIコンテナを指します。

この方法を使用すると、非モーダルフォームを表示できます。この メソッドを使用すると、フォームのOwnerプロパティがownerに設定されます。非モーダルの フォームでは、Ownerプロパティを使用して、所有する フォームに関する情報を取得できます。このメソッドを呼び出すことは、Ownerプロパティ を非モーダルに設定し、Show()メソッドを呼び出すことと同じです。

+0

ありがとう、それは動作し、私はそれが私の問題のための最良のソリューションだと思う。 –

+0

@EnamurRahmanそれはうまくいった。 –

0

このお試しください:このソリューション

Private Sub TreeView1_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick 
    Dim frm As New frm_purchase 
    frm.Show() 
End Sub 

Private Sub frm_purchase_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown 
    Me.TopMost = False 
End Sub 

Private Sub frm_purchase_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Me.TopMost = True 
End Sub 

を最初に作成するとき、あなたのフォームが一番上に表示されるようになりますが、それはあなたが望む行動であれば常に、前のフォームとは重なっています。そうでなければ、新しいフォームの所有者を現在のものに設定するだけで十分です(Hanletの答えによると)

+0

ありがとうございましたが、別の問題があります。このアプリケーションのさまざまなモジュールは、.dllファイルとして開発されています(別のチームによって&私はソースコードを持っていません)私は参照ファイルとして私のアプリに含まれており、これらのDLLのフォームを開く必要があります。私はこれらのdllの内部コードを変更することはできません。あなたは私を助けてくれますか? –

関連する問題