• ベストアンサー

フォームが show されるとき

スミマセン。教えていただきたいことがあります。 メインのフォームがあり、サブでフォームの追加でもう一枚作成し、 メインのフォームから実行時にボタンなどのイベント等でサブのフォームをshow したときは、サブのフォームは実際には表示されるだけですか? (アプリケーション起動時に既にサブのフォームはインスタンス化されているのでしょうか?ですよね?) 閉じるボタンを押したとき(普通の場合)はサブのフォームは非表示になっただけで破棄されていませんよね? 良くわかりません...よろしくお願いします。

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

  • ベストアンサー
回答No.3

2005なんですね? であるならば、アプリケーション起動時にはサブフォームのインスタンスは作成されていません。 明示的にインスタンスを作成しなければいけません。 また、閉じるボタンを押した場合ですが、内部にサブフォームを保持していれば、後はご自由に。。。 ○ private subForm as new SubForm private sub showSubForm() subForm.show() end sub private function getSubValue as string return subForm.textBox1.text end function × showSubFormを抜けた時点でsubFormのインスタンスがなくなるのでエラー private sub showSubForm() Dim subForm as new SubForm subForm.show() end sub private function getSubValue as string return subForm.textBox1.text end function ※いろいろ省略しています。

psychesine
質問者

お礼

ありがとうございます。 そうなんですか..インスタンス化されていないのですか...

その他の回答 (2)

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

そうでしたっけ・・・ VBのバージョンが書かれていませんが、 例えばVB6だと、 ・アプリケーション起動時に「サブフォームのインスタンス化」は行われない。 ・Showが実行された時点でインスタンスが作成される。 #厳密には、 #フォームのPublic変数等にアクセスするとInitializeイベントが発生するので、 #この時点でインスタンス化が行われると思われます。 #その後、表示用の情報の設定が行われ(Load)、表示(Show)が行われる・・・ ・フォームの右上のXボタンを押すとUnloadされる。 #表示用の情報はこの時点で破棄されるが、Public変数の情報は保持されるので、 #この状態では、インスタンスは保持されている。 とかの動作だったはずですが・・・ 別のバージョンだと違うのかも知れませんけど・・・

psychesine
質問者

お礼

すみません!バージョン忘れてました。 2005です。 ありがとうございました。

  • stiffels
  • ベストアンサー率34% (25/72)
回答No.1

通常VBのフォームデザイナで作成したフォームであれば 非表示状態でインスタンスが作成されているはずです。 閉じるボタンで閉じた場合も、非表示になっているだけです。 VBではUnload Meなどでインスタンスの破棄をしない限りは メモリ上に残ったままです。

psychesine
質問者

お礼

ありがとうございます。 安心しました。

関連するQ&A

  • ACCESS フォームの操作

    下記のようなことが可能であれば、方法をご教授願います。 まず、構造 フォーム2つ 1.メニュー…コマンドボタン2つ(BT11とBT12) 2.メイン  …コマンドボタン3つ(BT21とBT22とBT23) やりたいことは、 BT11とBT12のクリックイベントでどちらもメインフォームを表示 ただし、 BT11クリック時はacFormAddでメインフォーム上にBT21、BT23だけを表示し、 BT12クリック時はacReadOnlyメインフォーム上にBT22、BT23だけを表示 です。 フォームの表示は出来ましたが、 コマンドボタンの表示/非表示が切り替わりません。 sub BT11_Click() 1行目 DoCmd.OpenForm "フォーム名", acNormal, , acFormAdd, acDialog 2行目 Forms!メインフォーム!BT21.Visible = True end sub BT11をクリックしたときは、1行目でとまっているようです。 メインフォームを閉じるときに2行目を実行しようと するようで、メインフォームがないというエラーがでます。 宜しくお願い致します。

  • 新しいフォームへのデータを渡したい

    Visual studio 2005にてフォームアプリケーションを作成しています。 メインとなるフォーム(form.vb)と、ダイアログ表示用のフォーム(dialog.vb)を使い、メインでの値をダイアログ用のフォームの方で表示させたいのです。 メインのTextBox1にテキストを入力させ、「実行」ボタンを押すとダイアログ表示用フォームが立ち上がり、ダイアログのTextBox1に同じものを表示させたい・・・という寸法です。 できるだけ簡素なコードでこれを行うにはどうすればいいでしょうか? よろしくお願いします。

  • 【C#】サブフォームからメインフォームを操作

    サブフォームに設定したボタンをクリックしたらメインフォームのイベントを実行とかは可能でしょうか? メインフォーム→Main サブフォーム→Sub Mainに、ウェブブラウザ(webbrowser1)を用意して、 サブフォームのボタン(button1)をクリックしたら、 webbrowser1に、http://www.yahoo.co.jp が表示すると言うプログラムを作りたいです。 以下のプログラムではエラーが出てしまいました。 まず、Mainのフォームロード時にSubが開くように設定。 ※webbrowser1のModifiersをinternalに設定。 private void Main_Load(object sender, EventArgs e) { Sub subform = new Sub(); subform .Show(); } 次に、Subで Main mainform; private void button1_Click(object sender, EventArgs e) { mainform.webbrowser1.Navigete("http://www.yahoo.co.jp") } と書いて、実行時のエラーは無く実行できたのですが、 button1をクリックすると、エラーが出て止まってしまいます。 逆に、Subにウェブブラウザを置いて、Mainから操作するのは上記のプログラムで問題なく動きました。 どうすれば、Subからメインのイベントを操作できるのでしょうか? よろしくお願いします。

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

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

  • Excel VBAでユーザーフォームだけ表示したい

    Excel VBAでユーザーフォームを作成し、ファイルを起動時にSheetを非表示にしてユーザーフォームのみ表示させるようにしました。 そうしたところ、 (1)実行ボタンをクリックすると作成されるExcelファイルも表示されなくなる (2)終了ボタンをクリックするとユーザーフォームを含むExcelファイルだけが閉じるのではなく、Excelのアプリ自体が終了してしまう(実行ボタンで作成したExcelファイルは表示したままにしたいのに閉じてしまう) という現象になってしまいました。 某書籍を参考にしてコードを書いたのですが、なぜかこのようになってしまいました。 ※「★」が書籍に指示があった箇所です。 <ThisWorkbook> Private Sub Workbook_Open() Application.Visible = False '★ myForm.Show '★ myForm.MultiPage1.Value = 0 'マルチページ構成のため End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) '========== [×]ボタン,[Alt]+[F4]キーを無効にする ========== Dim msg As String, title As String msg = "[画面を閉じて終了する]ボタンから終了してください。" title = "終了方法" Dim res As Integer Select Case CloseMode Case vbFormControlMenu res = MsgBox(msg, vbOKOnly + vbCritical, title) Cancel = True End Select ActiveWorkbook.Save '★ Application.Visible = True '★ Application.Quit '★ End Sub 実行したいのは、 (1)ユーザーフォームを含むExcelファイルを起動したときは、起動時にユーザーフォームだけが表示されるようにしたい  ※ワークシートを非表示としたい (2)「実行」ボタンをクリックすると、プログラムが実行されExcelファイルが新規で作成され表示される  ※上記で記載した「★」の部分をコードをコメントアウトしてユーザーフォームから実行ボタンをクリックすると、プログラムが実行され正常にExcelファイルが新規で作成されることは確認済みです。 (3)ユーザーフォームが閉じても、ユーザーフォームのExcelファイルのみ閉じ、新規で作成されたExcelファイルは閉じない。  ※実行ボタンをクリックして新規ファイルを作成しなかったり、他にExcelファイルがなかった場合は、Excelは終了する。 それとあわせて、 (1)を実行できた場合に、再度コードを編集する時はどうしたらExcelの画面が表示できるのか教えて下さい。  ※それとも表示できないのでしょうか? 作成締め切りが迫っていて焦っています。 お知恵のある方どうかお力添え下さい。 よろしくお願い致します。

  • Accessでのフォーム表示

    こんにちは。 現在、Access2003で顧客管理の アプリケーションを作成しています。 ログイン画面でユーザ名とパスワードを入力するテキストを作成し、 コマンドボタンを1つ作成しました。 ユーザ名とパスワードを入力し、ボタンを押すと 認証をして、次のメインフォームを表示するようなものを 作成したいのですが、 別フォームをどうやって表示するのか分かりません。 Visual Basic にはshowメソッドがあったのですが Accessには存在しないようなのですが、どのようにして表示すればよいのでしょうか? どなたかご教授お願いします。

  • フォームが表示されない

    vb.net使用です。 メニュー画面(メイン) 待ち画面(テキストボックスとボタンがあります。) 実行画面 の3つのフォームがあります。 メイン画面から待ち画面を表示し、待ち画面から実行画面に移ります。 待ち画面でテキストにデータが入るまでループさせていて、 テキストにデータが入ってから実行画面を表示させるプログラムを作っているのですが、 待ち画面のループのプログラムで実行画面を表示させているのですが、(この時は表示している) プログラムが終了すると実行画面が消えてしまいます。 ループのプログラムをやめて、ボタンから行うと実行できます。 INVOKEも使用してみても状況がかわりません。 実行画面が使用できるようにするにはどうしたらよいか教えていただけないでしょうか。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Private Sub 待ち画面_Load(sender As Object, e As System.EventArgs) Handles Me.Load Psmachi End sub Private Sub  Psmachi() Do Until txttxt.text <> “”     実行画面.show Me.hide Loop End sub Private sub bottan_click     実行画面.show Me.hide End sub

  • フォームがないプロジェクト

    vb2005でプロジェクトを作成しています。 このプロジェクトはフォームがなく moduleのみで構成されています。 sub main() ・・・・・・・・ end sub private function ... ..... end function このプロジェクトで、開始時と終了時に絶対実行したい処理を追加したい場合は、新たにフォーム等を作成して、フォーム非表示にするなどの設定をしなければいけないでしょうか? できればご教授、よろしくお願い致します。

  • エクセル97でのユーザーフォームについて

    エクセル97でのユーザーフォームについて教えて下さい (1) まず最初にユーザフォームを作成しました。 (2) エクセルオープン時にメニューバーにボタンを追加し、そのボタンを押すと   ユーザーフォームが表示されてくるという風に考えました。 ユーザーフォームは表示されるのですが、フォームに配置されているボタン等を 押してもまったく利きません(本来はメッセージが表示される) アクティブにはなっているようなのですが... Private Sub UserForm_Activate() End Sub 上のアクティブになった時に何か処理をもりこまなければいけないのでしょうか? 初歩的な質問で申し訳ないのですが、宜しくお願い致します。

  • 複数のユーザーフォームをコマンドボタンにて表示・非表示させるには

    VBA勉強中のものです。 複数のユーザーフォームをコマンドボタンを使用して画面への表示切替を考えております。 例)ユーザーフォーム1,ユーザーフォーム2,ユーザーフォーム3のそれぞれにコマンドボタン1,コマンドボタン2,コマンドボタン3を作成し、   コマンドボタン1→ユーザーフォーム1を表示   コマンドボタン2→ユーザーフォーム2を表示   コマンドボタン3→ユーザーフォーム3を表示 とするようなことを考えおります。  そこで、下記のようにコードを作成したのでですが,一度表示させたユーザーフォームを再度表示させようとコマンドボタンをクリックしたら、「フォームはすでに表示させているのでモーダル表示はできません」とエラーがでてしまいます。   どなたか、どのようにしたらいいかご教授ねがいます。 サンプルコード) --------------------------------------------------- 'UserForm1のコード Private Sub CommandButton2_Click() Call UserForm2_show UserForm1.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm1.Hide End Sub ---------------------------------------------------- 'UserForm2のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm2.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm2.Hide End Sub ------------------------------------------------------- 'UserForm3のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm3.Hide End Sub Private Sub CommandButton2_Click() Call UserForm2_show UserForm3.Hide End Sub ------------------------------------------------------------ '標準モジュール コード Sub UserForm1_show() UserForm1.Show End Sub Sub UserForm2_show() UserForm2.Show End Sub Sub UserForm3_show() UserForm3.Show End Sub

専門家に質問してみよう