• ベストアンサー

Unloadイベントについて。

こんにちわ。最近VBを始めた高校生です。 初歩的な質問だと思うのですが、Unloadイベントのプログラムコードには、If文を使ったりはできないのでしょうか。ぜひ、教えてください。

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

  • ベストアンサー
  • iwaz
  • ベストアンサー率57% (8/14)
回答No.1

Unloadイベントは、コントロール メニューの [閉じる]× をクリックするか、 Unload ステートメントが実行されると発生します。 質問の件ですがこのイベントの中でIf文も問題なく使えるはずです。 このイベントを利用するのは、終了確認メッセージを出したりするのに使う ことが多いです。これに似たイベントでQueryUnloadイベントというものが ありこちらはUnloadイベントよりも前のタイミングで発生します。 終了確認を書くとこんな感じになります。 Private Sub Form_Unload(Cancel As Integer) Dim r As Long r = MsgBox("終了してもよろしいですか。", vbYesNo) If r = 7 Then Cancel = True End If End Sub

cremona
質問者

お礼

わざわざ例まで書いていただいて、ありがとうございました。大変参考になりました!!

関連するQ&A

  • VB.NET でのLaod/unLoad について

    VB6.0 には、Load/unload でのフォームを 読み込み、あるいは、開放(?)があったかと思います。 .NET以降は、調べたところ showメソッドか、 showDialogを使うみたいですが、いずれも 読み込みし終えて、Unloadするときはメモリからも 開放されるんでしょうか? あと、Load・Unloadのコードサンプルを ここで教えていただけないでしょうか。 乱文ですが、教えていただけると嬉しいです。

  • FormのUnload時に例外が発生する

    開発環境 :Windows2000 :VisualBasic6.0 :Oracle9i :CrystalReports10 お世話になります。 現在、VB6でCrystalReportsの帳票を出力する画面を作成しております。 画面はDirListBoxとFileListBoxからプレビューしたい帳票を選択し、 「印刷」ボタンを押下することで帳票が表示される、シンプルな作りと なっております。 今回質問したい内容は、帳票出力後に画面をUnloadしようとすると例外が発生することについてです。 Unloadするとデバッガが起動し、 「VB6.EXE[4桁の数字(毎回異なる)]でハンドルされていないWin32の例外が発生しました。」 というエラーが発生し、利用可能なデバッガとしてインストールされている VisualStudio2005が表示されます。 デバッグを開始すると 「0559884F mov eax,dword ptr [ecx+4] 」 でデバッグが止まり、 「VB6.EXE の 0x0559884f でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000058 を読み込み中にアクセス違反が発生しました。」 が表示されます。 これはどういったエラーなのでしょうか? ちなみにプログラム側でUnload処理部分からブレークポイントを設けてデバッグを行うと、上記例外は発生しません。 わかる方がいらっしゃいましたら、回答願います。

  • FormClosing イベント から終了を取り消すには VB2005

    VB2005で開発しているのですが。 FormClosingイベントの中で。Formの終了イベントを取り消すにはどうしたらよいでしょうか? たとえば。こんなコードがあったら 終了イベントの取り消しにはなんと書いたらよいでしょうか? Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing  If TextBox1.Text = "01" Then    MsgBox("完了!!", MsgBoxStyle.OkCancel)  Else   ' ここに取消終了のコードを書いたらいいのですか? End If End Sub すいませんが。アドバイスをお願いします。 開発環境: XinXP Pro SQL Server2005 Express VS2005 Pro VB2005

  • AccessでのVB記述について

    恐らく初歩的なことと思いますが…。 Accessのイベントプロシージャから、VBの記述で IF文の条件で、not equal はどのように表現するのでしょうか? C言語でいうと if( aa != 0 ){ ・・・ } という判断をしたいのです。 equal なら If aa = 0 Then ・・・ EndIf でいいのですが。

  • 終了してもプログラムが実行したまま(VB)

    非常に時間のかかる繰り返し処理を行なうプログラムを作りました。どのくらい、プログラムが進行しているのかわかりやすくするため、 Progress.Show でProgressという名前のフォームを表示し、そこに、プログラムが何%終わったのか表示するようにしました。 プログラムはDo Loop文が使ってあるので、何%終わったのかを表示するためにLoopした回数を取得して、それをフォームに表示することにしましたが、どこかで調べたら機械は、Do Loopのあいだはフォーム上に文字を表示するのに手が回らないからDoEventsを使ってイベントを実行させなさい、といわれました。 そこまではうまくいきました。プログラムを実行すると、プログラムが実行されて何%終わったかもちゃんと表示できるようになりました。 ところが、プログラムの実行中にフォームの右上の×ボタンを押したところ、フォームは画面から消え、プログラムが終了したように見えるのに、VB Editorでは[実行中]となっており、終わってくれません。ずっとDo Loopが実行されたままです。 Private Sub Form_Terminate() のところに Unload Progress と書いても、「Unloadメソッドは使えません」などというエラー・メッセージが出ます。(フォーム上にボタンを置き、そこをクリックするとUnloadするようにしてみましたがやはり同じことを言われました。) 原因は何でしょうか? フォームをUnloadする、ということの意味をちゃんと理解していないのでいけないのだと思うのですが、調べてもよく言っていることがわかりません。 よろしくお願いします。

  • VB.Netのフォームロードイベントについて

    こんにちわ。 いまVB.Net2005Expressで勉強をしている者です。 あるフォームがロードされるときの処理を書こうとすると, 従来のVB6ではFormオブジェクトにLoadイベントがありましたが, VB.Net2005では,最初の状態ではフォームのイベントには 「New」,「Finalize」,「InitializeComponent」の3つしかありません。 もしVB.Net2005でForm_Loadイベントを書きたいときは, 自分で, 「Private Sub Form1_Load(Byval ~」と書かなくてはいけないのでしょうか? 初歩的な質問になるかもしれませんが,教えてください。 よろしくお願いします。

  • C#でイベントハンドラを呼び出す方法

    すいませんが調べてもわからなかったのでお伺いします。 C#でイベントハンドラを呼び出す方法なのですが たとえばクリックの中のプログラムを別の所から呼び出すと言うことができるのでしょうか? 中身の一部ではなく全体です。 VBだとsubの名前を書いておけばよかったんですが..... 最近始めたばかりでよくわかりませんよろしくお願いいたします。

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

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

  • Paintイベントが実行できません。。。

    Paintイベントが実行できません。。。  こんにちは、いつも勉強させていただいております。 質問させていただきます。どうぞよろしくお願いいたします。 新年早々とんちんかんな質問でしたら申し訳ございません^^;  開発環境Vista+VB2008になります。  デバッグ開始(再生ボタン)後、Label_E_2.Invalidate()からの Label_E_2.Paintイベントがしょっちゅう実行できなくなるので、 一時停止ボタンを押してみると毎回、別のイベント(Label_E_1.Paint)中の 決まった行が緑色になり、 「このスレッドによって現在の関数が実行された後、次に実行されるステートメントです。」 と表示されます(←理解できておりませんorz)  For Each コントロール In Panel1.Controls   If InStr(コントロール.name, "_E_") Then    コントロール.Image = My.Resources.Btn_E_OFF   End If   ↑この行でございます  Next  毎回この行でPaintイベントが止まっているようなイメージを受けております。 「コントロール」という変数の使い方がまずいのでしょうか。。。? もしかすると解放作業か何か必要になるのかな?などと試行錯誤いたしております。 以前別のプログラムで同じようなコードを作成したときは問題なかったのですが。。。  Googleで検索などいたしましても出てこず、悩んでおります。 どのような現象なのかだけでもアドバイスいただくことができれば嬉しいです。  もしお詳しい方がいらっしゃいましたら,アドバイスいただきたく どうぞよろしくお願いいたします。

  • システムの時刻を利用しながら800ミリ秒毎のイベント発生

    現在For~Next文とSleep(700)を使用し、 イベントの処理時間を100ミリ秒と換算し、 2台のPCで同じコードを適用させ、 約800ミリ秒ごとにイベントを発生させております。 しかし、処理コード中にIf文やFor文も多数使用しているため、 取得条件の違いや、システムの負荷(?)、PCの性能(?)より遅延が発生していたり、 2台のPC間で一時間当たりの取得情報の量に違いがあることがわかりました。 2台のPCはNTPによる時刻同期により時刻のズレはないものとします。 はたして、システムから時刻を取得しつつ、 正確な800ミリ秒ごとのイベントを発生させる方法はあるのでしょうか。 面倒くさい質問で申し訳ありませんが、どうかよろしくお願いいたします。 現在のコードを以下に記します。 Sub ●約800ミリ秒ごとイベント発生プログラム●() Dim n As Long 'ループ用カウンタ Dim data As String For n = 1 To 26500 'ここから記録機能 Cells(n, "A") = Time Sleep (700) Calculate DoEvents '本当はここにイロイロなコードが入ります。 'ここに入るコードはスグに終わるときもあれば '80ミリ秒くらいかかるときもあります。 Next End Sub

専門家に質問してみよう