Form を Load するまでに終わりたいのですが・・・・。

タグの編集
投稿者 hori  (社会人) 投稿日時 2013/5/2 13:41:32
かなり初歩的な内容と思うのですが
僕なりに調べましたけれど分からないのでご教授ください。

Form を複数開けるようにしていると無限ループ状態になる可能性があるので
少なくともテーブルに書き込みできる Form の2重起動は止めたいと思います。

で、以下のようなコードを書きました。
本当は、ファンクションプロシージャの中の [処理内容 = "終了"] の部分で
終わらせたいのですが、どう書けばいいのか分かりません。

このままですと終わるのは終るのですが、一瞬 Form が開いて
画面がチラっとするので気分がイマイチです。

どなた様か、すんなり終われる方法を是非ともお教えください。よろしくお願いいたします。

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

 Public Overloads Function ShowDialog(ByVal Owner As IWin32Window ) As DialogResult
                                                                          
        Dim a As String = "1"
        For Each f As Form In Application.OpenForms
            If TypeOf f Is Form1 Then
                a = "2"
                Exit For
            End If
        Next

        If a = "2" Then
            MsgBox("『本処理』は既に起動中です。本プロセスは終了します。")
            処理内容 = "終了"
        End If

    Return Me.ShowDialog()

End Function

 Private Sub Form1_Load(ByVal sender As System.Object, _
                                 ByVal e As System.EventArgs) Handles MyBase.Load

        If 処理内容 = "終了" Then
            Me.DialogResult = DialogResult.No
            Me.Close()
            Exit Sub
        End If

End Sub
投稿者 キメラ  (社会人) 投稿日時 2013/5/2 15:08:00
> Form を複数開けるようにしていると無限ループ状態になる可能性があるので

これが何を意味しているのか分かりませんが、このフォームのインスタンスを唯一として使用したいということでしょうか?
シングルトンという概念もありますが、単純に、このフォームのインスタンスを生成するときに
開いているフォームがあるかどうかをチェックするのが手っ取り早いのではないでしょうか。
(このフォームを開く処理が書かれているのは親フォーム等の別クラスですよね?)

> MsgBox("『本処理』は既に起動中です。本プロセスは終了します。")

「プロセス」という言葉は、アプリケーション単位に使うことが一般的なので(例外あるかも)、
「本プロセス」というメッセージには違和感があります。
投稿者 キメラ  (社会人) 投稿日時 2013/5/2 15:20:00
なお、もし、どうしても提示のコードの修正で動くようにしたいのであれば、
ShowDialogメソッドの最後の条件式の部分を以下のようにすればいいと思います。
       If a = "2" Then
            MsgBox("『本処理』は既に起動中です。本プロセスは終了します。")
            処理内容 = "終了"
            Return DialogResult.No        'ShoDialogしない 
       Else
         Return Me.ShowDialog()      ''ShoDialogする 
       End If


投稿者 hori  (社会人) 投稿日時 2013/5/2 16:36:04
キメラさま。ありがとうございます。
お教えの通りやりましたら、うまいこといきました。ありがとうございます。

Form を開く前にチェックすればいいのですが修正箇所が複数になるので・・・・。
これだと開かれる側の頭をちょこっと修正すれば済むかと思いましたが
これだけのことが分からないのは我ながら情けない話です。

『プロセス』という表現については、他に適当なものが思いつかなかったので使いました。
僕のレベルだとそんなに違和感はないんですけれど・・・・。

ともかく、一瞬のチラっがなくなって気分爽快です。ありがとうございました。