- - PR -
業務メニューから各画面の起動について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-03-27 14:11
いつも、お世話になります。
Visual Studio 2005(VB)にて、Windows業務アプリを作成しています。 メニュー画面を作成し、各機能を呼び出す部分を作成しています。 【環境】 メニュー ├─得意先マスタ │ └─得意先検索画面 └─商品マスタ 例としまして、上記の4つFormがあります。 "メニュー"より"得意先マスタ", "商品マスタ"をShow()で呼び出します。 "得意先マスタ"より"得意先検索画面"をShowDialog()で呼び出します。 【再現方法】 "メニュー"を起動し、"得意先マスタ"⇒"得意先検索画面"を開くと、 "メニュー"が操作できなくなってしまします。 "得意先検索画面"を閉じると、"メニュー"が操作できます。 【やりたいこと】 運用上、"得意先検索画面"と"商品マスタ"を同時に使用することがありますので、 "メニュー"は、常に使えるようにしたいのです。 どなたか、良案がありましたら、ご教授下さい。よろしくお願いします。 | ||||
|
投稿日時: 2009-03-27 14:11
得意先検索画面をShowDialogで呼び出しているからですね。 ShowDialogはモーダル表示なので、元画面の操作はできなくなります。 | ||||
|
投稿日時: 2009-03-27 14:20
返信ありがとうございます。
ShowDialogが問題なのですね。 "得意先マスタ"が操作できなくなるのは、結構なのですが、"メニュー"まで拘束されてしまうのは、なんとかならないものでしょうか? [ メッセージ編集済み 編集者: たま 編集日時 2009-03-27 14:21 ] | ||||
|
投稿日時: 2009-03-27 14:27
ShowメソッドとShowDialogの違いを理解されていますでしょうか? ShowDialogは、開かれた画面のみを有効としそれ以外を触れなくするために 使用します。(ちょっと語弊がありますが) そのため、メニューが使用可能にすることはShowDialogを使用している限りできません。 画面を開く際にShowを使用するとかに変更しないといけないと思います。 コーディング規約とかで、ShowDialogを使用するとかになってる場合は、画面仕様か 規約見直しが必要じゃないでしょうか? | ||||
|
投稿日時: 2009-03-27 14:41
おそらくですが「得意先検索画面」というようなものは
あらゆる画面で得意先を参照する際に汎用的に使うような画面なのではないでしょうか。 だとすると例えば「メニュー」がいつでも操作できたとして 「商品マスタ」画面で取引先を参照できるようにした場合、 「得意先マスタ」でも「商品マスタ」でも「得意先検索画面」を開いた状態が起こり 混乱しないでしょうか。 (そもそも前提が違ったらすみません) 簡単に思っておられる動作にしたいなら ShowDialog を Show に変えたらいいと思います。 その上で「得意先検索画面」を開いている時に「得意先マスタ」を操作されたくないのであれば その様なロジックを自分で実装するしかないと思いますが。 とにかく同時に操作できる画面は少ない方が排他制御も楽だし私はいいと思います。 | ||||
|
投稿日時: 2009-03-27 14:47
別スレッド上で Application.Run メソッドにて得意先マスタ画面を開いてやると、一応期待通りの動作になると思います。
# 一般的なやり方ではないと思うので、もしかしたら何らかの弊害が発生するかもしれません。 _________________ C#と諸々 | ||||
|
投稿日時: 2009-03-27 15:43
僕はC#で同じ事を実現した事があり、
各画面(Dialog以外)にスレッドを割り当てています。 そうすると、得意先検索画面(Dialog)を表示しているときは 得意先マスタ画面は扱えずに、商品マスタ画面とメニュー画面は 操作できる様になります。 ただし、スレッドセーフな処理を実現する様に 注意が必要になりますが・・・ | ||||
|
投稿日時: 2009-03-27 15:52
モーダルのみで運用するように設計するとかなり楽が出来ますよ
想像ですが、得意先検索画面か商品マスタで商品と得意先の関連付けをするなど、 それぞれの画面が多機能化しているのではないでしょうか? 検索などユーザ補助機能画面は機能に特化させ、情報は必要なときに必要なものだけを表示するようにすれば、 モーダルのみでもユーザビリティが高いシステムを設計できると思います。 |