R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

VB6で ShowDialog

ある掲示板から拾ってきたネタをヒントに、VB6 でも自分自身のフォームを Show できるんだよという話題。

例えば、認証フォームを作った時、これを呼び出す側から、以下のように使いたいと思うことはありませんか?


Dim 認証 As New 認証フォーム
Call Load(認証)
Dim R As Boolean: R = 認証.ShowDialog()
Call Unload(認証)

If (R) then
    Call 認証成功処理
Else
    Call 認証失敗処理
End If


こうするには、認証フォームを次のようにすれば良いのです。


Private キャンセルボタンが押された As Boolean

Public Function ShowDialog() As Boolean
    キャンセルボタンが押された = False
    Call Show(vbModal)
    if (キャンセルボタンが押された) Then
        ShowDialog = False
        Exit Function
    End If
    ShowDialog = (ユーザー名とパスワードは一致している())
End Function

Private Sub Okボタン_Click()
    キャンセルボタンが押された = False
    Call Hide
End Sub

Private Sub Cancelボタン_Click()
    キャンセルボタンが押された = True
    Call Hide
End Sub


ソースコードは何も参考にせずにいきなり書き殴っただけなので、

動かないかもかもかも

ふいんき(何故か変換できないw)だけ掴んでくだちゃい。

-------------------------------------

ところで、 επιστημη さんのところでも、VB ネタが話題になっています。

http://blogs.wankuma.com/episteme/archive/2006/11/17/45855.aspx

要ちぇーくっ!

投稿日時 : 2006年11月17日 17:46

Feedback

# re: VB6で ShowDialog 2006/11/17 18:04 じゃんぬ

最近、どこかで VB6 で ShowDialog を実装すれば良いでしょう。
と書いたような気がします。

それはともかく、DialogResult バージョンも。
http://jeanne.wankuma.com/tips/form/closingbutton.html

# re: VB6で ShowDialog 2006/11/17 20:05 まどか

>VB6 でも自分自身のフォームを Show できるんだよという話題

この意味がわからないのですが。。。

それ以降の流れを見ると、単に返値を返したいというだけの様な気が。。。

# re: VB6で ShowDialog 2006/11/17 20:06 R・田中一郎

じゃんぬさんの回答でしたか。

掲示板を読んでいて、自分自身を Show できるって知らない人がいるんだなー、と思ったのを覚えていて、今日ネタに困ってサンプルコードを殴り書きしました^^;

でリンク先を読んで気づいたのですが、モーダルでShowさせるの忘れてました^^;

いくつかサンプルコードを読んで思ったので、宜しければ教えていただけると嬉しいのです。

じゃんぬさんの書き方は、僕の好みととても良く似ていますし、またじゃんぬさんの書き方で共感を得て自分の書き方を変更したことも多々ありましたので・・・

---/ 引用開始 /----
' FormSub を表示する
Call hFormSub.Show(vbModal)
---/ 引用終了 /----

Call Load(hFormSub) と明示的に書かない場合は、Call Show のタイミングで同時に Load されると思うのですが、このような省略は、じゃんぬねっとさんは良くされるのでしょうか?

僕は、Call Load(xxForm) と明示的に書く場合の方が多いのです。

と言うのは、Call Load(xxForm) ~ Call xxForm.Show の間に、いろいろな処理をさせなければならない場合があるため、この場合には、Call Load(xxForm) と明示的に書かねばならず、そのような記述をしてしまう場面がある以上、統一感を持たせるために、全てにおいて Call Load(xxForm) と明示的に書こうと思ったためです。

---/ 引用開始 /----
Private Sub cmdOK_Click()
' 手動で、このフォームの DialogResult プロパティに値を設定する
mDialogResult = EnumDialogResult.OK

' このフォームを閉じる
Call Unload(Me)
End Sub
---/ 引用終了 /----

Call Unload(Me) と書けますが、じゃんぬさんはこの書き方を良く用いるのでしょうか?
Call Unload(Me) を処理した時点で、Unload イベントが発生してしまい、イベントの発生順序が混乱してバグの温床になった経験から、Unload(Me) は使うまいと誓ったことによるものです。

---/ 引用開始 /----
' 不要になった時点で参照を解放する
Set hFormSub = Nothing
---/ 引用終了 /----

この部分ですが、この行は cmdShowSub_Click() のスコープを抜けた際に参照が破棄されるので不要だと、以前、同様の処理でじゃんぬねっとさんに教わった記憶があるのですが、実際は書いた方が良いんでしょうか?(僕の記憶違いかもしれませんが)

以前は、Set x = Nothing する人だったのですが、スコープを抜けた際に破棄されるものは書かないように修正し始めていたりします^^;

# re: VB6で ShowDialog 2006/11/17 20:23 R・田中一郎

まどか さん

>この意味がわからないのですが。。。
>
>それ以降の流れを見ると、単に返値を返したいというだけの様な気が。。。

Form モジュール内で、Call Show と書くことが出来ますよ。というだけの話です^^;

# re: VB6で ShowDialog 2006/11/17 22:34 επιστημη

ほっぽうりょうど (何故か返還できない)
か、書きたかっただけデス。 汚してごめんデス。

# re: VB6で ShowDialog 2006/11/20 13:30 R・田中一郎

>ほっぽうりょうど (何故か返還できない)

北方領土・・・返還できましたが・・・・あっ、今気づきましたw

# 認証して起動する 2006/12/25 14:17 R.Tanaka.Ichiro's Blog

認証して起動する

# 認証して起動する 2007/01/04 1:30 R.Tanaka.Ichiro's Blog

認証して起動する

タイトル
名前
Url
コメント