MDI子フォームを複数開いたあと,子フォームの×で閉じると次のフォームの×が灰色になっていて,×をクリックすると"不正な処理を行ったので強制終了します."と出るのです.詳細を見ると"ページ違反"と書いてあります.
Dim frmD as Form
Select Case I
Case 1:Set frmD = New Form1
Case 2:Set frmD = New Form2
Case 3:Set frmD = New Form3
End Select
frmD.Show
こんなコードでいいんでしょうか?
MDIフォームは使ったことないのでわからないですけど、
まず、フォームをMe.Hideで消さないとダメらしいです。
フォーカスがうつるタイミングが悪いからという話を聞いたことあります。
ページ違反って言うのはまあ、単純に言えばWindowsの処理ミスとか、そういうもので、
プログラム側のせいではないので、気にしないでくださいね。
一般に、同じAPIをいくつかのところでいっぺんに使ったり、
Windows側に無理の出る処理をするとそうなることが多いです。
こころもMDIはあまり使ったことがないんですが
frmDが1つに対して、Case文で最大3種類のフォームが
作成されることになりますが、このCase文は
一度通ったら、作成したフォームが削除されるまで
通ったりとかしてないでしょうか?
> プログラム側のせいではないので、気にしないでくださいね。
そんなことはないはずです。
もちろん、Windows側(または他アプリ)の影響で
ページ違反が発生する可能性もありますが、
毎回同じ所ででるのでれば、確実に自アプリの責任でしょう。
ページ違反はおもに、メモリ関係のミスが原因です。
ありがとうございました.
今回はMe.Hideで解決できました.
ところでこころさん,
>一度通ったら、作成したフォームが削除されるまで通ったりとかしてないでしょうか?
CommandButtonのIndexをIとしていますので
フォームを削除しなくてもButtonを押す度に通っています.
なにか不具合でも出てくるんでしょうか?
>フォームを削除しなくてもButtonを押す度に通っています.
>なにか不具合でも出てくるんでしょうか?
まあ、出ていないならいいですけど、
念のため、
On Error Resume Nextとか、いれとくといいかも。
すでにShowされています。なんてエラーがあったと思いますから…。
ツイート | ![]() |