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

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

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

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

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

ともかく、一瞬のチラっがなくなって気分爽快です。ありがとうございました。
投稿者 キメラ  (社会人) 投稿日時 2013/5/2 15:20:00
なお、もし、どうしても提示のコードの修正で動くようにしたいのであれば、
ShowDialogメソッドの最後の条件式の部分を以下のようにすればいいと思います。
       If a = "2" Then
            MsgBox("『本処理』は既に起動中です。本プロセスは終了します。")
            処理内容 = "終了"
            Return DialogResult.No        'ShoDialogしない 
       Else
         Return Me.ShowDialog()      ''ShoDialogする 
       End If


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

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

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

「プロセス」という言葉は、アプリケーション単位に使うことが一般的なので(例外あるかも)、
「本プロセス」というメッセージには違和感があります。
投稿者 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