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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/06 19:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q自殺プログラム-自らunload するfrm

言語 Visual Basic 6.0(SP5)

自殺プログラム-条件が成立したら自分自身を消去するプログラム-として
タイマー条件付 「MsgBox 関数」モドキを作りたい(実際に作る内容はオーバーレイプログラムとして通信関係資源を含む外部資源の操作等も含みます)のですが
経過時間表示をしない「MsgBox 関数モドキ」

タイマーで終了(unload)せず手作業が必須な「MsgBox 関数モドキ」(非表示には成功しました)

親frmまで殺す「MsgBox 関数モドキ」
の作成には成功しました。

MsgBoxModoki.Show

等で参照した MsgBoxModoki.frm が
1.手作業を伴わずに何かしらの表示を伴う手続きを実行する命令(ヘルプメッセージの検索用語すらわかりません)等
2.自らunloadするようにする命令等
ご存知の方いらっしゃいませんか。いらっしゃったらば命令や検索語をお知らせください。

Aベストアンサー

1.タイマ処理のことでしょうか?違ってたら回答にならないのですが、
  Timerオブジェクトを使用してタイマイベントを発生させ、そのイベントメソッド内で処理を記述する。
  (Timerオブジェクトでヘルプ検索)

2.MsgBoxModoki.frm が発行する命令という解釈で、
  "Unload Me"
  (そういうことを質問されているのではないですか?)

※見当違いなことをいってたら無視してください。

Qvb2005でプログラムをとめるコードは?

お世話になります。
vb2005でプログラムに5秒間、時間をとめようとおもいます。
これだとTimerにエラーがでてしまいます。
('Timer' は型です。有効な式ではありません。)
どこをどうなおせばエラーがでなくなるのでしょうか?
教えてください。お願いします。

Dim sngSt As Single
sngSt = Timer
Do While Timer - sngSt < 5
DoEvents()
Loop

Aベストアンサー

Dim dtmStart As DateTime = DateAdd(DateInterval.Second, 5, Now)
Do While Now < dtmStart
Application.DoEvents()
Loop
でどうでしょうか?

DoEvents()が不要であれば、
System.Threading.Thread.Sleep(5000)
でも可能です。

QVB.NETでボタンクリックイベントの後に来るPage_Loadのようなイベントはありますか?

タイトルのとおりなのですが、
VB.NETでボタンクリックイベントの後に来るPage_Loadのようなイベントはありますか?
教えてくださいーー

Aベストアンサー

お世話になります。

ボタンを押そうが何をしようが、
PostBack するたびに、Page_Load は走りますよ。
そこで判断をしたいのであれば、
Page.Load イベント内で以下の様に記述してやれば
よいかもしれません。

If IsPostBack Then
  ' 初めてページを読み込んだ時処理
Else
  ' そうでない時処理
  If Not Request("ボタンの name") Is Nothing Then
    ' ボタン押下により発生した PostBack
  End If
End If

参考URL:http://msdn2.microsoft.com/ja-JP/library/system.web.ui.page.ispostback.aspx

Qif文からcase文への置き換え

ピクチャボックスをクリックしたら、チェック
ボックスがチェックされるメソッドを作りたいと
思っています。

Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click,PictureBox2.Click

'ここから
If sender Is PictureBox1 Then
If Me.CheckBox1.Checked = False Then
Me.CheckBox1.Checked = True
Else
Me.CheckBox1.Checked = False
End If
ElseIf sender Is PictureBox2 Then
If Me.CheckBox2.Checked = False Then
Me.CheckBox2.Checked = True
Else
Me.CheckBox2.Checked = False
End If
End If
'ここまで
End Sub

上記のif文をCase文に置き換えたくて、
'ここから
Select Case sender
Case PictureBox1
If Me.CheckBox1.Checked = False Then
Me.CheckBox1.Checked = True
Else
Me.CheckBox1.Checked = False
End If
Case PictureBox2
If Me.CheckBox2.Checked = False Then
Me.CheckBox2.Checked = True
Else
Me.CheckBox2.Checked = False
End If
End Select
'ここまで
上記のように書き換えたのですが、エラーが出てしまいます(ビルドは通るのですが)。

Case文の使い方が間違っているんだとは思いますが、どこがどう
間違っているのがよくわかりません。
ご教授いただけないでしょうか?

ピクチャボックスをクリックしたら、チェック
ボックスがチェックされるメソッドを作りたいと
思っています。

Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click,PictureBox2.Click

'ここから
If sender Is PictureBox1 Then
If Me.CheckBox1.Checked = False Then
Me.CheckBox1.Checked = True
Else
Me.CheckBox1.Checked = False
End If
...続きを読む

Aベストアンサー

SENDER は iS xxx としかかけません。
ですから 答えは
======================================================
Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click, PictureBox2.Click
Select Case True
Case sender Is Me.PictureBox1
If Me.CheckBox1.Checked = False Then
Me.CheckBox1.Checked = True
Else
Me.CheckBox1.Checked = False
End If
Case sender Is Me.PictureBox2
If Me.CheckBox2.Checked = False Then
Me.CheckBox2.Checked = True
Else
Me.CheckBox2.Checked = False
End If
End Select

End Sub
======================================================
です。
もっとコーディング数を減らすには
=========================================================
Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click, PictureBox2.Click
Select Case True
Case sender Is Me.PictureBox1
Me.CheckBox1.Checked = Not Me.CheckBox1.Checked

Case sender Is Me.PictureBox2
Me.CheckBox2.Checked = Not Me.CheckBox2.Checked
End Select

End Sub
================================================================
でも同じ動作をします。
なお、VB.NET 2005 で動作テスト済みです。

SENDER は iS xxx としかかけません。
ですから 答えは
======================================================
Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click, PictureBox2.Click
Select Case True
Case sender Is Me.PictureBox1
If Me.CheckBox1.Checked = False Then
Me.CheckBox1.Checked = True
Else
Me.Check...続きを読む

QVB6のコードをVB.NETに移したいのですが

WEBで見つけたVB6のサンプルコードをVB.NET用に書き直して
いるのですが、なんとか波線のエラーはなくなったものの
実行すると、思った結果が得られません。
正しい訂正方法を教えて頂きたいです。

サンプルコードは下記のサイトにありました。
http://vbnet.mvps.org/index.html?code/internet/findfirstcacheentry.htm
インターネットキャッシュに関するものです。
文字数の関係で全部は書けないのですが、現在は↓のようになっています。
その他の訂正箇所は
全部のAs Any を As Objectに変更していて、
ComboBoxのアイテムに数値が設定できないようなので、
Select Caseで判断するようにしています。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim numEntries As Long
Dim cacheType As Long

Select Case ComboBox1.SelectedIndex
Case Is = 0
cacheType = &H1S
Case Is = 1
cacheType = &H8S
Case Is = 2
cacheType = &H10S
Case Is = 3
cacheType = &H20S
Case Is = 4
cacheType = &H40S
Case Is = 5
cacheType = &H10000
Case Is = 6
cacheType = &H100000
Case Is = 7
cacheType = &H200000
Case Is = 8
cacheType = URLCACHE_FIND_DEFAULT_FILTER
End Select

Label1.Text = "Working ..."
Label1.Refresh()
ListBox1.Items.Clear()
ListBox1.Visible = False
numEntries = GetCacheURLList(cacheType)
ListBox1.Visible = True
Label1.Text = VB6.Format(numEntries, "###,###,###,##0") & "files found"
End Sub

Private Function GetCacheURLList(ByRef cacheType As Long) As Long
Dim ICEI As INTERNET_CACHE_ENTRY_INFO
Dim hFile As Long
Dim cachefile As String
Dim nCount As Long
Dim dwBuffer As Long
Dim pntrICE As Long

dwBuffer = 0

hFile = FindFirstUrlCacheEntry(vbNullString, 0, dwBuffer)
If (hFile = ERROR_CACHE_FIND_FAIL) And (Err.LastDllError = ERROR_INSUFFICIENT_BUFFER) Then
pntrICE = LocalAlloc(LMEM_FIXED, dwBuffer)

If pntrICE Then

CopyMemory(pntrICE, dwBuffer, 4)
hFile = FindFirstUrlCacheEntry(vbNullString, pntrICE, dwBuffer)

If hFile <> ERROR_CACHE_FIND_FAIL Then

Do
CopyMemory(ICEI, pntrICE, Len(ICEI))
If (ICEI.CacheEntryType And cacheType) Then
cachefile = GetStrFromPtrA(ICEI.lpszSourceUrlName)
ListBox1.Items.Add(cachefile)
nCount = nCount + 1

End If
Call LocalFree(pntrICE)
dwBuffer = 0
Call FindNextUrlCacheEntry(hFile, 0, dwBuffer)
pntrICE = LocalAlloc(LMEM_FIXED, dwBuffer)
CopyMemory(pntrICE, dwBuffer, 4)
Loop While FindNextUrlCacheEntry(hFile, pntrICE, dwBuffer)
End If
End If
End If
Call LocalFree(pntrICE)
Call FindCloseUrlCache(hFile)

GetCacheURLList = nCount
End Function

どうしてもここから分からないので、お助けいただきたいです。
よろしくお願いいたします。

WEBで見つけたVB6のサンプルコードをVB.NET用に書き直して
いるのですが、なんとか波線のエラーはなくなったものの
実行すると、思った結果が得られません。
正しい訂正方法を教えて頂きたいです。

サンプルコードは下記のサイトにありました。
http://vbnet.mvps.org/index.html?code/internet/findfirstcacheentry.htm
インターネットキャッシュに関するものです。
文字数の関係で全部は書けないのですが、現在は↓のようになっています。
その他の訂正箇所は
全部のAs Any を As Objectに変更してい...続きを読む

Aベストアンサー

> ツールの中にあるVB6を自動で変換するという機能を使って
> 変換した際にLongが全部Integerになっていたので、
> 全部Longに戻してしまってあります。

つまり、
「APIを使用するとき、型を変更しないとかなりの確率で誤動作」するので、
親切にも直してくれた(LongをIntegerにしてくれた)のに、
貴方は、それを無効にしたって事です。

Integerにしてください。


このカテゴリの人気Q&Aランキング

おすすめ情報