• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB.Net 3つのフォームのうち1つを制御できないように。。? )

VB.Netで複数のフォームを制御する方法

このQ&Aのポイント
  • VB.Netで複数のフォームを制御する方法について教えてください。
  • Form1上のButton1を押すと、Form2とForm3を呼び出してForm1を制御できないようにしたいです。
  • Form2とForm3だけを制御可能にし、Form1を待機させる方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 わたくしごとで大変恐縮だがちょっと僕ももう寝ないといけないので簡単なところだけ。  Form2とForm3が必ずForm1の上に居るようにする(Form2とForm3が絶対にForm1に隠れないようにする)には、Form2とForm3のParentFormだか要するに親っぽい物をForm1に設定するといいよ。  Form2.ParentForm = Form1 みたいな感じ。OwnerFormだったか。名前は忘れた。  デュアルモーダル? ツインモーダル? どっちの名前がより格好良いかな? まぁそれはどうでも良くて2つのFormを同時にモーダルにするのは無理なのでどちらもモードレスで開く(ShowDialogではなくShow)事になるのだが、ではその間Form1をどうするかだけど、Form2とForm3の操作によってForm1の表示が変わる場合と完全に停止させたい場合とでやり方はずいぶん変わってくるはず。どちらにしても今時間がなくてやり方を考え付くには至っていないので申し訳ない。  完全停止ならForm2をShowした後Form3をShowDialogしてやれば良いかも知れないがだめかも知れない。だめだったらマルチスレッドにすればうまくいくかもしれないしだめかもしれない(waitとかjoin(これはJavaか?)とか駆使して。ただし、フォームスレッドをこの方法で停止させてはいけん)。だめだったらFormスレッドへのInvokeなんかをキーワードに探せば何か良い知恵が見つかるかも。  Form2とForm3が必ずペアで表示されるならForm1がForm2をShowDialogしてその時にForm2がForm3をShowしてやれば良いかも知れん。

MKT_
質問者

お礼

 どうもありがとうございます! アドバイスいただいた後色々試させていただきまして、 何とか整理できました^^ >デュアルモーダル? ツインモーダル? どっちの名前がより格好良いかな?  自分的にはツインモーダルでございます Σ d(-_☆) あと今後3つ以上使う人が現れることを見据えて「マルチモーダル」とかw ̄ー ̄ >わたくしごとで大変恐縮だがちょっと僕ももう寝ないといけないので いえいえ私めのような者の質問に上級者の方々から少しでも アドバイスいただくことができれば十分でございますし非常に助かります。  結局Form1からForm2.ShowDialog後、 Form2からForm3.Show といたしましたら Form3のMouseDownやMouseMoveイベントのみは 取れることが分かりましたので、 Form3上のクリックしないと使えないコントロール群を なんとか他のFormへ移動いたしまして、 Labelなど表示用コントロールのみ残しましたところ、 自分のやりたいことができるようになりました^^  Form1は完全に停止させたかった次第でございます。  この度はご親切なご説明どうもありがとうございました!!                 m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.2

C#のソースですが、参考になればです。 http://www.oborodukiyo.info/Forms/VS2008/F-ManageOwnerForm.aspx 要は子フォームのOwnerに親フォームをセットして表示し、親フォームのEnabledをfalseにすれば希望の動作が可能です。

MKT_
質問者

お礼

 どうもありがとうございます! >C#のソースですが 今勉強中でございますm(_ _)m Cは昔「はじめてのC」を 読んだ程度でございますので、気合い入れて解読させて いただきます^^;  結局、Form1.Enabled = False も試させていただきましたが、 コントロールの色がグレーアウトされてしまいまして、 細かいボタンを色分けしておりましたのが見にくくなって しまいましたため、残念ながらあきらめました。。。orz  リンクをどうもありがとうございました!今後閲覧してくださる 方々にはoboroxx様につけていただいたリンク先が分かる方が 参考になるかな、と思うのですが、結局今回はNo.1氏にいただいた 方法で解決させていただきました故、アドバイスいただきました順に ポイントを付けさせていただきます。  この度はご閲覧・アドバイスいただきまして どうもありがとうございました!!!m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 2つのメッセージボックスを表示している間、コードを待機させる方法

    2つのメッセージボックスを表示している間、コードを待機させる方法  今晩は,いつも勉強させていただいております。 質問させていただきます。どうぞよろしくお願いいたします。  開発環境はXP+VB2008になります。  Form_MsgBox1とForm_MsgBox2上での操作が完了するまで Form1のコードを中断したいのですが、そのような事って 可能なのでございましょうか。。。??  そもそも中断させる方法が分からなかったのですが、 先の質問でご親切にShowDialogをお教えいただけましたので 【Form1】  Private Sub Button_Click    :   Dim f As New Form_MsgBox1   If f.ShowDialog(Me) = DialogResult.OK Then   Else    Exit Sub   End If    :  End Sub 【Form_MsgBox1】  Private Sub Form_MsgBox1_Load    :  Dim f As New Form_MsgBox2  f.Show()    :  End Sub といたしましたところ、Form_MsgBox2の操作が できなくなってしまいました。。 (それ以外は全部大丈夫でございます) Form_MsgBox1とForm_MsgBox2を交互に操作している間、 Form1だけ待機させて操作できなければよいのですが。。  検索いたしておりますと、複数のShowDialogが可能か どうかといったQ&Aがいくつか見つかるのですが、 いまいちよく分かりませんでしたorz  何かよさそうな方法がひらめかれるようでございましたら、 是非ともアドバイスいただきたくお願い申し上げます。  もしお詳しい方がいらっしゃいましたら,どうぞよろしく お願いいたします。

  • vb2010で2つのフォームを同時制御

    vb2010でプロジェクトを作成しています。 Form1がメインで、Form2を観客用に用意しています。 Form1のButton1をクリックすると、Form2のPictureBox1に画像を表示させたく、 下のようなプログラムを書いたのですが、Form2に画像が表示されないばかりか、 「オブジェクト参照がオブジェクトインスタンスに設定されていません。」というエラーまではかれてしまいます。このエラーの意味もわからないほど、素人なのでわかる方どうかよろしくお願いします。 ------------------------------------------------------------------------------ Private Sub Form1_Load Dim g As New Form2 g.Show() ------------------------------------------------------------------------------ Private Sub Button1_Click Form2.PictureBox1.Image = Image.FromFile("C/xxxxxxx.png") Form2.Refresh() ------------------------------------------------------------------------------

  • [VB6] フォームを閉じる方法について

    お世話になります。 VB6で別フォームを起動する際の親フォームの閉じ方について 質問させてください。 呼び出し元フォームからShowメソッドで別フォームを起動すると、 呼び出し先のフォームでマウスのカーソルが砂時計表示になってしまいます。 (呼び出し元のフォームはUnload Meで閉じています。) [Form1の処理] Private Sub Button1_Click() Form2.Show Unload Me End Sub ※Form1は呼び出し元。Form2は呼び出し先。 原因について、どなたかご存知の方がいらっしゃいましたら、 ご教授願えますか?

  • Form1.vbをイベントなしで動作させるには?

    VB2005初心者で困っています。 Menu.vbとForm1.vb, Form2vb, Form3.vb・・・を作り、Menu.vbのButton1_ClickでForm1.Show()としてForm1.vbに移行し、次にForm1のButton1_clickイベントでExcelからDataを読み込んでGraphを書かせています。(この時は問題なく動作しています) これを、Form1に移行したらすぐにGraphを表示しようとして、Form1.vbの Public Class Form1 Private Sub Button_Clic(Byval sender As System・・・・・)Handles Button1.click   Dim g As Graphics   ・・・・ を変更して、  Private Sub Form1_Load(Byval sender As System・・・・)Handles MyBase.load Me.Show() Dim g As Graphics   ・・・・ と、しましたが、一瞬Graphは表示しますが、すぐに消えます。 また、罫線はまったく表示しません。 Button_ClickイベントなしでForm1を動かすにはどうすればよいのでしょうか?

  • VB2010 フォームのリロード

    今までVB6.0でプログラミングをしていた者で、最近VB2010に開発環境を変えました。さっそくソフトを開発しているのですが、フォームのリロードが必要なところがあったためそこのプログラムをネットなどで参考にして書いてみたのですがどうしてもエラーがでます。 今までVB6.0ではその部分を Private Sub Command1_Click() Set Form1 = Nothing Call Unload(Me) Form1.Show End Sub と、記載していました。これをVB2010のコードに書き換えるとどのようになるのでしょうか。 ご回答よろしくお願いいたします。

  • 特定のフォームだけ別フォームからの参照がされません

    VB 2005,Framework2.0を使用しています。 現在、サブフォームからダイアログフォームを表示し、ダイアログフォーム内の入力値等をサブフォームに渡す処理を行っています。 サブフォームは複数作成しており、特定のサブフォームだけダイアログフォームの入力値がサブフォームに渡されず原因が分からなくて困っています。 コードは以下のような形で書いています。 'サブフォーム Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f As New Dialog1 f.StartPosition = FormStartPosition.CenterParent f.ShowDialog() End Sub End Class 'ダイアログフォーム Public Class Dialog1 Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click Form1.Label1.Text = Textbox1.text Me.Close() End Sub End Class 2005では、別フォームからの参照はVB6と同じようにインスタンスを作成しなくても参照できる様になったと聞いていますので、上記のコードでも参照方法として問題はないと思うのですが、うまく動作しない原因が分かる方が居られましたら宜しくお願いします。

  • VB2010の、Formを開く動作に関する質問です

    VB2010のFormについてお聞きしたいことがあります。 例えばForm1とForm2の2つがあるとして、 ・Form1上のボタンをクリック後Form2が表示される ・Form2を表示後Form1は自動で閉じられる。 この様な事をするにはどの様に行えばよろしいでしょうか? 試しに、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Form2.Show()   Me.Close() End Sub と、してみたのですが Form2が表示された直後に1と2両方消えてしまいました。 改善方法を教えていただけると嬉しいです。 よろしくお願いいたします。

  • sub プロシージャを呼び出すにはどうればいいんですか?in vb 2005

    恐れ入ります。 vb2005にて、sub プロシージャをよびだしたいんですけどどうすればよろしいでしょうか?教えて下さい。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click load ike 'vb6ではこれでいけたのに・・・ End Sub Public Sub ike() textbox1.text="イケメン" end sub End Class

  • VB.NET フォーム上に描いたグラフィックのクリア方法

    最近、VB6からVB.NET 2003へプログラムの移行作業を始めたものです。極々基本的なことなのかもしれませんが、.NETでフォームに描いたグラフィック(線や円など)を消去するコードがなかなかうまく書けず困っています。 VB6でしたら Form**.Cls だけで消えるのですが、それに対応するコードはどのように記載すれば宜しいでしょうか? ヘルプなどで見るとClearメソッドを使用するとありましたが、どうもうまく動きません。 例えば、以下の簡単な例でしたらどのように変えれば宜しいでしょうか? 宜しくお願いいたします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Dim grph As System.Drawing.Graphics   grph = Me.CreateGraphics   grph.DrawLine(Pens.Red, 50, 25, 200, 150)   ClearScreen(e) End Sub Public Sub ClearScreen(ByVal e As PaintEventArgs)   Dim BGcolor As Color   BGcolor = Color.FromArgb(0, 0, 0)   e.Graphics.Clear(BGcolor) '背景色 End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click   ClearScreen(e) End Sub

  • 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をしているのが気に入らなくて… もっとスマートな方法がありましたら、ご指導お願いします。