• 締切済み

別フォームから戻ったときのイベント

VB.NETの質問です。 フォームA(以下A)から、フォームB(以下B)を モーダル表示で呼びだした後Bを閉じて、Aに戻ったときに、 フラグを立てたいと思っています。 このタイミングのイベントは どのようにして取ればよいのでしょうか? ちなにみAのActivatedイベントで試してみたのですが、 結果NGでした。 Aの上にBが重なっている状態で Bの部分的に見える箇所を一瞬クリックしても Activatedイベントが実行されてしまい、 フラグが立ってしまします。 もちろんモーダル表示なので、Aが前面にくることは ないのですが、なぜかActivatedイベントが実行されてしまいます。 きちんとBを閉じて、Aに戻った時に限り フラグを立てたいと思っています。 Bを閉じた時にB側でフラグを立てる方法もありますが、 仕様の都合上、A側で処理をさせたいのです。 以上、わかりづらいかもしれませんが ご存じの方がいましたらご教授ください。

みんなの回答

  • NYOI
  • ベストアンサー率58% (56/96)
回答No.3

既に出ている回答以外ですと、 BのClosedイベントに、A側で何か処理をAddHandlerすればBが閉じられたときにそれが実行されます。 この方法ですと、モーダル・モードレス関係なくBが閉じられた時に処理が実行できます。

回答No.2

既に回答が掛かれてますが、敢えて補足すると… Bをモーダルで表示している間、Aの処理は概念的には ShowDialogのところで 「止まっている」と考えて差し支えないと思います。 なので、ShowDialogの直後でフラグを立てたりするだけで構わないのです。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ShowDialogでモーダル表示していると思います この戻り値を使えばいいのではないですか? dim dlgRet as DialogResult dim dlg as new myModalForm() dim bflag as boolean = false dlgRet = dlg.ShowDialog(); if dlgRet = DialogResult.OK then   bflag = True else   bFlag = false end if といった具合ですが ・・・

kenntoto
質問者

補足

回答ありがとうございました。 そもそもdlgRet = dlg.ShowDialog() の書き方が間違っていて、 本来は画面を表示している間ストップするはずですが、 ストップされずに、これ以降の処理に進んでいたのが うまくいかなかった原因でした。 この方法で試してみたいと思います!

関連するQ&A

  • keydownイベントを発生で他のフォームで受信

    VB初心者です。 よろしくお願いします。 バーコードリーダーで読み込んでtextboxに表示させる仕組みを作りましたが、バーコードリーダーが ないのでバーコードリーダーを読み込んだように疑似的にできるようなことを考えています。 考えとしては バーコードを読み込んで表示させる:フォームA  ・keydownイベントを受っとる  ・textboxに読み込んだ値を表示 バーコードを読み込んだように疑似的に動作する:フォームB  ・keydownイベントを発生させる  ・フォームBに入力した値をフォームAに渡す フォームAは作成できましたが、フォームBのようなことはできるのでしょうか。 どのようなイベントを使用したらいいかなど、アドバイスをいただけないでしょうか。 環境:VB2008 OS:Windows7

  • 別のフォームへ値を渡したい。

    VB2005環境です。 同じソリューションに、フォームAとフォームBの2つのフォームが 存在しています。 フォームAはDBに接続して値を取得し、それをグリッドやテキスト ボックスなどに表示するのですが、そのフォームAが取得した値を フォームBも使いたいのです。 フォームBはフォームAから起動されるので、フォームBのロード時に フォームAの値を使えたらと思うのですが、サンプルコードを交えて ご教授願えないでしょうか? いくつか方法があるとは思うのですが、フォームAはたくさんの 値(大きさではなく種類)があるので、多くのデータを簡単に 受け渡せるような方法であるとありがたいです。 よろしくお願いします。

  • comboboxのクリックイベントについて

    VB6です comboboxを設置してクリックイベントに処理を書いたら、フォームロード時に必ず1回クリックイベントが発生します。 当初はフラグを立ててこの現象を回避していたのですが、コードを書くうちに、この最初のクリックイベントが面倒で仕方ありません。 comboboxを設置するとフォームロード時に必ずクリックイベントが発生するのはVB6の仕様なのでしょうか。 それともほかに回避の仕方があるのでしょうか。

  • Loadイベント中にほかのイベントを発生したくない

    VisualC# .net です。 フォームを表示する場合に コンストラクタが呼ばれその後ロードイベントで フォームのコントロールの初期設定を行っています。 (この方法がまちがっている?) ロードイベント内でコンボボックスの初期設定を行うと コンボボックスのイベントが発生してしまいます。 以下参照にて このイベントでメッセージを表示しているのですが 初期設定では出てほしくありません。 そこで、 これを防ぐためには以下のようにフラグを立てるような 方法しかないのでしょうか? それともDebugger.IsAttached のようなものが 用意されているのでしょうか public bool iload = false;     (←仮フラグを追加) private void Form1_Load(object sender, EventArgs e) { iload = true;    (←仮フラグを登録) ComboBox1.SeletedIndex = 0; iload = false;   (←仮フラグを削除) } private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (iload) return;     (←仮フラグ登録時はなにもしない) MessageBox.Show("変更しました"); }

  • フォームのちらつき

    VB6で、Yes/Noメッセージボックスを表示させ、Yesなら処理実行、Noなら何もしない・・・というプログラムを作ったのですが、Noを選択したときにフォームがちらついて、エクスプローラーが一瞬表示されてしまいます。 これを防ぐにはどうしたらいいのでしょうか? 教えてください。

  • VB2008でユーザーコントロールのイベントについて

    VB2008でユーザーコントロールのイベントについて 作成したユーザーコントロールを(1)フォームに配置した時のみ実行される (2)フォームを実行した時のみ実行される それぞれ処理を分けたいのですが、適切なイベントが見つかりません。 何か区分けのできる方法はあるのでしょうか? 何方か教えていただけませんか

  • [VB.NET]3つ以上のフォームを一つずつ表示し、最後のフォームを閉じた時に最初のフォーム以外のフォームを閉じる

    VB.NETを学んでいるのですが、現在3つ以上のフォームを表示していくものを作ろうとして躓いたことがあったのでこちらに書き込みました。 内容としては、ボタンを押して次のフォームを表示していくものです。 動作の流れは以下のように考えています(フォームはA、B、Cの3つとする) 1.Aを表示 2.Aでボタンを押してBを表示し、Aは隠す 3.Bでボタンを押してCを表示し、Bは隠す 4.Cでボタンを押してBとCを閉じ、隠していたAを表示 隠すのはHideを用いてできたのですが、4.でCのボタンでBとCを一緒に閉じてAを表示させる方法がわかりませんでした。 1~4のように動作させるにはどうすればいいか教えてください

  • [VB.NET]Windowsアプリに、Page_PreRenderイベントは存在するか

    VB.NET2003,2005についての質問です。 下記の処理を、Windowsアプリケーションで実現することは可能でしょうか。   ・各コントロールのイベントで、メンバ変数であるフラグAに、値を設定する処理を行う。   ・各コントロールのイベントが「終了後」、このフラグAの内容によって、処理Bを実行したい。     例)ボタンクリックイベント→処理B       テキストチェンジイベント→処理B     ※各コントロールのイベントには、フラグAの判定処理を組み込まない 上記の処理は、ASP.NETであれば、Page_PreRenderイベントを利用することで実現できました。 Windowsアプリケーションには、ASP.NETにおける、Page_PreRenderイベントのようなものは存在するでしょうか。 存在しなければ、どのような方法で上記の処理を実現できるでしょうか。 以上、どうぞよろしくお願い致します。

  • イベント load に BringToFront が書いてあるのですが...

    教えていただきたいことがあります。 スタートアップフォームのイベント load でデザインで作成済みの小さいフォームをshowしています。その後に SendToBack しています。 showされた小さいフォームのイベント load に BringToFront が書いてあるのですが、showされた小さいフォームが必ず前面に来ません。 その後にボタンのイベントでshowされた小さいフォームをBringToFrontすると前面に表示されます。 起動後にBringToFront等で前面に表示させるには、どのようにすればよいですか? 申し訳ありません。よろしくお願いします。

  • これって可能でしょうか?(起動しているフォームのみの稼動)

    VBの超初心者です。 以下の様な事は可能なのでしょうか? フォームAからあるボタンを押してフォームBを起動する。 フォームBが立ち上がっている時は、フォームBしか使用できないようにする。 (つまり、フォームBが全画面表示でタスクバーも表示されず、他のプログラムも  使用不可になる。) 表示タイプをモーダルにして、フォームAを使用不可にする事は可能だったんですが 他の常駐しているプログラムも使用不可にしたいのです。 有識者の皆様、どうぞご教授下さいませ。 宜しくお願い致します。