• 締切済み

VB.net 2010 のMDI

VB.net2010でMDIアプリを検討中です。 親Formと子Form1、子Form2で考えています。 子Form1が表示されている状態から、さらにメニューから選ぶと もう1つ子Form1が生成され表示されます。 子Form1は必ず1つしか表示されないようにする方法は ないでしょうか。

みんなの回答

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

インスタンスを1つしか生成しない(New しない)だけ の話ですが。 http://dobon.net/vb/dotnet/form/singleform.html オブジェクトの管理の基本だから、原理まで理解した ほうがいいところですね。

関連するQ&A

  • VB2005のMDIについて

    はじめまして。現在、VB2005で開発しております。 MDIの操作で判らないところがありますので、ご存知の方がいましたら、教えてください。 MDIで開発しております。親フォームで発生したイベント内で子フォームに対してコントロール操作(画面を操作する関数を実行)を行うのですが、画面は全く動作しません。 ※デバックで確認するとコントロール操作しております。 対象の子フォームは必ず表示されていますが、必ずしも最前面にはいません。 今回のように親フォームから子フォームのメソッドを実行する際に動作する方法を教えてください。それとも、操作することは不可なのでしょうか。宜しくお願いします。

  • MDI子FormのControlBox

     以下のような状況で、MDI_Formを使っています。VB.NET_2005,XPです。  親フォームにTreeViewを設け、そこをメニューがわりにして、Nodeのクリックから子フォームを切り替えています。  子フォームのControlBoxを出さない設定にしているのですが(「×」「最大/最小化」ボタンを出さない)、1回目の表示を除いて、2回目以降は、ControlBoxが出ます。  ControlBoxに関する、Design時の設定、ノードクリック時,子フォーム表示時のコード操作による設定は、全て無視されます。  「×」ボタンが使用不可になっているので、現在は何とかなっていますが、出さない方法ってないものでしょうか?。

  • VB.NET MDI 親子フォームのメニューをマージしたくない

    MDI アプリケーションを作成しています。 親フォーム、子フォームともにメニューを持っています。 子フォームを表示すると、親子のメニューがマージしてしまうのですが、子フォームのメニューは、子フォームに表示するようにできないのでしょうか? よろしくお願い致します。

  • VB2008でMDIフォームを使用した時の不具合

    お世話になります。 VB2008でMDI親フォームから 子フォームを表示して子フォーム内のイベントから クラスモジュールを生成してフォーム内のリストに 表示処理を行っているのですが、クラスは確かに 呼ばれているのですが子フォーム内のリストに データが表示されません。 親フォームに Me.IsMdiContainer = True FRM = New FRMZIP With FRM .MdiParent = Me .Show() End With 以外に子フォームのオブジェクト定義が 必要なのでしょうか? VBは6.0以降殆ど実務では経験ありません。 宜しくお願いいたします。 PS 子フォームを単体で起動すると普通に 動作します。

  • VB.NETのMDIアプリについて

    現在VB.NET EXP 2008を用いてMDIアプリを作成しています。 下記のような3種類のフォームを作成し,アプリ開始時にMAINの中にMENUを表示させ, MENU上のボタンをクリックすると,MASTERを表示させたいと考えています。 親フォーム : MAIN 子フォーム : MENU 子フォーム : MASTER まずはMAINのLoadイベントで Dim fMENU As New MENU fMENU.MdiParent = Me fMENU.Show() と記述して実行するとMENUがMAIN内に表示されます。 次に,MENU上のボタンクリックイベントで Dim fMASTER as New MASTER Dim fMAIN as New MAIN fMASTER.MdiParent = fMAIN fMASTER.Show() として実行してもMASTERが表示されません。 そこで,MAINのLoadイベントに Dim fMASTER as New MASTER fMASTER.MdiParent = Me と追記し,MENU上のボタンクリックイベントに Dim fMASTER as New MASTER fMASTER.Show() として実行すると,MASTERは表示されますが, MAINの外側に表示されてしまいます。 どのようにすれば,MAIN内にMASTERを 表示させることが出来ますでしょか?

  • VB6でMDIフォームを使用しています。

    VB6でMDIフォームを使用しています。 MDIフォームで下記プログラムを作成しました。 (1)ツールバー上のボタン1を押し、子フォームAを表示させました。   ※子フォームAの WindowState を「2-最大化」に事前設定し、ウィンドウは最大化して表示されました。 (2)子フォームAを表示した状態で、同じツールバー上にあるボタン2を押し、子フォームB(ダイアログ)を表示させました。   ※子フォームBの WindowState を「0-標準」、BorderStyleを「3-固定ダイアログ」に事前設定し、表示されました。(一般的なオプション画面みたいなもの) 問題点はその際、子フォームAのウィンドウが勝手に「最大化」から「標準」に変わってしまうことです。 これを回避する方法はないのでしょうか? 以上、宜しくお願いいたします。

  • MDIでフォームがアクティブにならない

    VB2008です。 MDIフォーム中にForm1とForm2があります。 Form1がアクティブです。 Form2をクリックしてもアクティブになりません。ただしタイトルバーをクリックするとアクティブになります。 これは言語の仕様でしょうか。市販のアプリケーションでは、タイトルバー以外の場所をクリックしてもアクティブになるものがほとんどですが、VB2008ではどのようにすれば実現できるのでしょうか。

  • VB.NET MDI親フォームのスクロールバー制御

    開発環境:Windows XP、VB.NET 2005 MDI親フォームに複数のMDI子フォームを貼り付けるプログラムを作っています。 MDI子フォームを重ならないように配置させているのですが、MDI親フォームの表示領域を超えた場合に自動的にスクロールバーが現れます。 この時に、マウスのホイールの上下の動きにあわて、MDI親フォームのスクロールバーを制御して画面を上下させたいのですが方法が分かりません。 どなたかご享受ください。

  • VB2010でMDI親フォームから子フォームを表示

    VB2010でソフトを作っております。 MDI親フォームから子フォームを表示させたいのですが…。 過去に少しだけVB6を使っていたことがありますが、クラスという概念に苦労しております インスタンスや初期化といったところをうまく扱えばとは思うのですが、よろしくご指導お願いいたします。 1.MDI親フォーム(Form1)のボタンを押し、子フォーム(Form2)を表示させる 2.子フォームが表示されていなかったら表示させる 3.子フォームが表示されていたら何もしない これだけの事ですがずいぶん悩んでおります。 全コードがこれです。 Public Class Form1 Private f2 As New Form2 Private Sub Form1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.IsMdiContainer = True End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim fChild As Form() = Me.MdiChildren For Each f As Form In fChild If f.Text = "Form2" Then Exit Sub End If Next f2 = New Form2 f2.MdiParent = Me f2.Show() f2.Activate() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If f2 Is Nothing OrElse f2.IsDisposed Then f2 = New Form2 f2.MdiParent = Me End If f2.Show() f2.Activate() End Sub End Class ボタン1でもボタン2でも、期待する動作はするのですが、 ボタン1ではアクティブになっているフォームの名前を力技で取得している気がして… ボタン2では子フォーム(Form2)をすでに表示している状態でもさらにShowをしているのが気に入らなくて… もっとスマートな方法がありましたら、ご指導お願いします。

  • MDI アプリケーションで

     VBの、アプリケーションウィザードでMDIテキストエディタが作れますよね。  それをいじってMDIの勉強してるんですが、今はそこで終了時に編集していながらまだ保存していないフォームを探して、コモンダイアログを表示させて保存させようとしています。  しかし、どうすればいいのか分かりません。  はじめは、フォームのキャプションかどこかに編集した印でも付けて、Formsを使ってそれを判断させようとも思ったのですが、開発途中で子フォームがもう一つ出来てしまい、それとごちゃごちゃになってしまう可能性が出てきました。  何とか、テキスト編集用の子フォームのみを判断させたいのですが、上手く出来ないものでしょうか。  特定の子フォームの数や番号を特定できるコマンドとかってVBにあるんですかね。あれば出来そうなんですが……何か良い方法があればお教えください。 ------------------- 開発環境 VB6.0(SP5) WIN2000

専門家に質問してみよう