Form を Load するまでに終わりたいのですが・・・・。 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 キメラ  (社会人)
投稿日時
2013/5/2 15:20:00
なお、もし、どうしても提示のコードの修正で動くようにしたいのであれば、
ShowDialogメソッドの最後の条件式の部分を以下のようにすればいいと思います。
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("『本処理』は既に起動中です。本プロセスは終了します。")
「プロセス」という言葉は、アプリケーション単位に使うことが一般的なので(例外あるかも)、
「本プロセス」というメッセージには違和感があります。
これが何を意味しているのか分かりませんが、このフォームのインスタンスを唯一として使用したいということでしょうか?
シングルトンという概念もありますが、単純に、このフォームのインスタンスを生成するときに
開いているフォームがあるかどうかをチェックするのが手っ取り早いのではないでしょうか。
(このフォームを開く処理が書かれているのは親フォーム等の別クラスですよね?)
> 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
僕なりに調べましたけれど分からないのでご教授ください。
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
お教えの通りやりましたら、うまいこといきました。ありがとうございます。
Form を開く前にチェックすればいいのですが修正箇所が複数になるので・・・・。
これだと開かれる側の頭をちょこっと修正すれば済むかと思いましたが
これだけのことが分からないのは我ながら情けない話です。
『プロセス』という表現については、他に適当なものが思いつかなかったので使いました。
僕のレベルだとそんなに違和感はないんですけれど・・・・。
ともかく、一瞬のチラっがなくなって気分爽快です。ありがとうございました。