"不正な処理を行ったので..."にならないようにするには?

解決


けんぢ  2001-07-25 17:24:46  No: 103587  IP: [192.*.*.*]

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

こんなコードでいいんでしょうか?

編集 削除
たかみちえ  URL  2001-07-25 23:06:54  No: 103588  IP: [192.*.*.*]

MDIフォームは使ったことないのでわからないですけど、
まず、フォームをMe.Hideで消さないとダメらしいです。
フォーカスがうつるタイミングが悪いからという話を聞いたことあります。

  ページ違反って言うのはまあ、単純に言えばWindowsの処理ミスとか、そういうもので、
プログラム側のせいではないので、気にしないでくださいね。
一般に、同じAPIをいくつかのところでいっぺんに使ったり、
Windows側に無理の出る処理をするとそうなることが多いです。

編集 削除
こころ  URL  2001-07-26 02:00:42  No: 103589  IP: [192.*.*.*]

こころもMDIはあまり使ったことがないんですが
frmDが1つに対して、Case文で最大3種類のフォームが
作成されることになりますが、このCase文は
一度通ったら、作成したフォームが削除されるまで
通ったりとかしてないでしょうか?

> プログラム側のせいではないので、気にしないでくださいね。
そんなことはないはずです。
もちろん、Windows側(または他アプリ)の影響で
ページ違反が発生する可能性もありますが、
毎回同じ所ででるのでれば、確実に自アプリの責任でしょう。
ページ違反はおもに、メモリ関係のミスが原因です。

編集 削除
けんぢ  2001-07-26 09:49:47  No: 103590  IP: [192.*.*.*]

ありがとうございました.
今回はMe.Hideで解決できました.

ところでこころさん,
>一度通ったら、作成したフォームが削除されるまで通ったりとかしてないでしょうか?
CommandButtonのIndexをIとしていますので
フォームを削除しなくてもButtonを押す度に通っています.
なにか不具合でも出てくるんでしょうか?

編集 削除
たかみちえ  URL  2001-07-26 10:42:15  No: 103591  IP: [192.*.*.*]

>フォームを削除しなくてもButtonを押す度に通っています.
>なにか不具合でも出てくるんでしょうか?
  まあ、出ていないならいいですけど、
念のため、
On Error Resume Nextとか、いれとくといいかも。
すでにShowされています。なんてエラーがあったと思いますから…。

編集 削除