0

ユーザーがプロパティシートの[OK]または[適用]ボタンをクリックし、プログラムが一部のページのデータが無効であると判断した場合、エラーを含むページをエラーを説明するメッセージボックスとともに表示するにはどうすればよいですか?

現在、検証を行うプロシージャは、PSN_APPLY通知の処理中に次のことを行います。

MessageBox (hDlg, "Data must be positive!", "Error", MB_OK);
SetWindowLong (hDlg, DWL_MSGRESULT, PSNRET_INVALID);

これは、検証(A)を実行しているページが現在表示されている場合は問題なく機能しますが、他のページ(B)が表示されている場合は、そのページ(B)が表示された状態でメッセージボックスが表示され、メッセージボックスに応答すると、そのページが表示されます。検証エラー(A)が表示されます。そのページ(A)がPSN_SETACTIVE通知を受け取ると、メッセージボックスが表示されるようにフラグを設定することを考えましたが、それはちょっとおかしなようです。

Win32 APIはC++で、MFCも、NETも、派手なものもありません。

4

1 に答える 1

0

問題は、検証の設計とそのプレゼンテーションにあると思います。

プロパティシートを繰り返し処理し、検証して、問題が発生した場合にメッセージボックスを表示すると思いますか?もちろん、私がプロパティページ3にいて、プロパティページ1のフィールドにがらくたを書き込んだ場合、あなたが目撃したことは起こります。

最も簡単な解決策は、検証するときに、問題のフィールドがどのプロパティページであるかをメモし、ユーザーがフィールドの1つにがらくたを書き込んだ場合はそのページをアクティブに設定することです。これは可能な限り最速の方法のようです。

また、迷惑なメッセージボックスを表示するのではなく、プロパティページの下にスペースを確保して、理由に関するテキスト(赤またはその他)の警告を表示してから、適切なプロパティページに変更し、問題のあるコントロールを強調表示します。検証ルーチンは、ループするときにこれを簡単に実行できます。

さらに良いことに、最初のエラーで停止しないでください。私が嫌うのは、唯一の問題だと思う1つのフィールドを修正することです。「OK」または「送信」を押すたびに、他に見逃したことがあると言われるだけです。

私はあなたがここでさらに一歩進むことを検討すべきだと真剣に考えています...すべてのコントロールをループし、すべての無効なコントロールをリストに追加します。次に、問題のある各コントロールの背景色、タブの色などを変更します。これにより、ユーザーは、エラーがいくつ発生しても、作業を行って修正することができます。

于 2011-07-10T15:25:56.247 に答える