• ベストアンサー

VBで子フォーム以外をマウスダウンすると子フォームが閉じる

Vargasの回答

  • Vargas
  • ベストアンサー率45% (9/20)
回答No.3

まず、Visual=TrueではなくてVisible=Trueです。 これについてはヘルプのVisibleプロパティ項に下記の記載があります。 「フォームの Show メソッドまたは Hide メソッドを使うことは、フォームの Visible プロパティをコードで真 (True) または偽 (False) に設定することと同じです。」 という事なので素直に Show = (Visible = True) Hide = (Visible = False) と考えましょう。 また、子フォーム表示中に親フォームをクリック出来る という事は、間違い無く、モードレスウィンドウで 表示させていると思われますが、このとき親フォームを クリックして子フォームが閉じられることは絶対に ありません。したがって、イベントプロシージャに Unloadが記述されている可能性大です。 MouseDownイベントだけではなく、 子フォームのClick、Activateイベント あるいは子フォームのLostFocusイベントなども 調査する必要があるのではないでしょうか? シングルステップでデバックしてみてはいかがでしょうか。

greenhope
質問者

お礼

詳しい解説、ありがとうございました。 Visible と Show の関係が似ていてよく分からなかったのでが、これで明快になりました。 今後ともよろしくお願いします。

関連するQ&A

  • Access+VB 子フォームから親フォームを・・・

    親フォームの中にタブを置き、その中にサブフォームを置いています。 子フォーム側から、上記のサブフォームの追加許可を「はい」にしたいのですが、どのように記述したらよろしいのでしょうか? Forms("親フォーム名").[サブフォーム名].AllowAdditions = True  これで通りませんでした。 教えて下さい。

  • VB.Net フォームのKeyPressイベント

    お世話になります。 日夜 VB.Net でAccess ADPファイルで作ったシステムのリメイクをしております、駆け出しの者でございます。 フォームのイベントでKeyPressイベントがありますが、 Me.ActiveControl.BackColor = Color.LavenderBlush この記述で、フォーム上に配置されているテキストボックなどの背景色を変えられるのですが、マウスで、各コントロールをクリックしても背景色が変わりません。 フォームのClick関係、Mouse関係のイベントで同じ記述をしても、フォームに配置してあるコントロールには適応されないようで、どうしたものかと思っております。(どこか見逃しているのか?!) マウスでテキストボックスなどのコントロールをクリックした時にそのコントロールの背景色を変えるには、例えば100個のテキストボックスがあった場合には、100個のClickイベントに背景色を変えるコードを記述する必要があるのでしょうか?(それは大変だと思うのですが・・・) もし、フォームのマウス、クリックのイベントで ActiveControl の背景色が変更できるイベントや、その他、やり方があるようでしたら、何卒ご紹介いただけますようよろしくお願いいたします。

  • VBのグリッドにてマウスクリックでセル位置を正確に取得したい

    Visual BASIC でアクティブコンポーネントのグリッド(表)を使用しています。 ●グリッドのセルをマウスでクリックした時に、そのセルの列と行の位置番号を 正確に取得したいのですが、1列ある見出し列(行)をクリックしても 1(本来は 0)が、最初のデータ列(行)をクリックしても 1が返り、同じため正しく処理できません。(データのセルは正しく番号が取得できます。) どうしたら、クリックしたセルが見出し列(行)かどうか判別できますか? ●また、マウスをドラッグして複数のセルの範囲を取得したいのですがマウスDown と マウスUp イベントで列(行)番号を取得してもどちらも、マウスDown 時の値が返り、範囲となっていません。どうしたら、範囲を認識できますか。 分かるかたがおられたら教えてください。 (片方でも結構です。) Visual BASIC は Version 5 です。

  • 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を 表示させることが出来ますでしょか?

  • マウスクリック時のフォームについて

    VS2005で勉強中の初心者です。 今実験的につくっているアプリがあるのですが わからないところがあるので質問させて下さい。 今仮にフォーム1とフォーム2があるとして フォーム2はプロパティでTopMostをTrueにしてあるとします。 ここで例えば、フォーム1のコントロールを操作し その後フォーム2のボタン1を押す操作をしたいような場合 フォーム2のボタンを押下しようとクリックしても 最初の1度目ではフォーム2がアクティブな状態になるだけで ボタンを押す行動が実行されません。 フォーム2からフォーム1へ移る場合も同じ状態になります。 どちらのフォームがアクティブな状態だとしても 操作をすぐに受け入れるように作りたいと思って マウスイベントによってフォームの状態を変更するようなものを 書こうと思ったのですが それは遠回りな方法で、本当はフォームのプロパティ等で簡単に 設定できるものなのかもしれないと考え、質問させていただきました。 つたない説明で申し訳ありませんが よろしくお願いいたします。

  • 子フォームから開いたフォームと親子関係を結びたい(VB2003)

    子フォームから開いたフォームと親子関係を結びたい(VB2003) VB.NET2003についての質問です。 formMain のクラスに以下のコードを書いて実行させると、form1がformMainの子フォームとして開きます 下記は、「form1」を「formMain」の子フォームとして開くコードです。 (formMainクラス内のコードです)   ------------------------------   Dim f As New form1   Me.IsMdiContainer=True   f.MdiParent=Me   f.Show   ------------------------------ form1には、form2を開くボタンが用意されています。 質問内容は、このform2を、formMainの子フォームとして開くにはどうすればよいか、ということです。 ためしに、form1クラスに以下のコードを書いて実行させたところ、 「formMainは型であるため、式として利用することができない」というエラーメッセージが出てしまいました。   ------------------------------   Dim f As New form2   f.MdiParent = formMain   f.Show()   ------------------------------ 以上、よろしくお願い致します。

  • MDI親フォームで子フォーム開放を知る

    はじめまして。VB.NET2005でプログラミングをしている初心者です。 MDIフォームのAPを作成しています。 MDI親フォーム1つと子フォームが2つあるとします。 親フォームから子フォーム2つをShowします。 子フォーム1を閉じたときに、親フォーム内で子フォーム1が閉じられた事を知るすべは無いのでしょうか。 親フォーム内で起こるイベントでどの子フォームが閉じられたかを得たいと思っています。 どなたか分かる方いらっしゃいましたらご教授ください。 宜しくお願い致します。

  • [VBA]呼び出したユーザーフォームのみを消すには

    「main」というユーザーフォームがあります。 フォーム内には「呼出」というボタンが配置されていています。 これを押すと「sub.show」が実行されて、subというユーザーフォームも表示されます。 この状態でsubフォームの[x]ボタンを押すと、mainフォームも消えてしまいます。 mainフォームを消さずにsubフォームのみを消すにはどうすればよいでしょうか。 それと、このような質問のカテゴリーはプログラミング内の「Visual Basic」と「その他」のどちらが適切でしょうか。

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

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

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