DOBON.NETプログラミング掲示板過去ログ
ダイアログ画面が最前面にならない
題名: ダイアログ画面が最前面にならない
著者: 黒犬
日時: 2006/04/23 22:46:02
ID: 15441
この記事の返信元:
(なし)
この記事への返信:
[15442]
Re[1]: ダイアログ画面が最前面にならない
まどか
2006/04/23 22:49:33
ツリーを表示
環境/言語:[ Framework1.1 WindowsXP SP2 C#]
分類:[.NET]
いつもお世話になります。
先日の質問後からも設計をしているのですが、テストアプリを作成中に
ラインを引く為に、カラーダイアログを表示させました。
ところがコード上は実行されているのですが、ダイアログが表示され
ないのです。不思議に思いALT+TABで切り替えてみた所
ダイアログが表示されました。
何故なのか原因が分からないのですが、ダイアログがアプリの背後に表示
されてしまっています。
ダイアログはモーダル表示なので、必ず最前面表示だと思っていたのですが
.netでは動作が変わるのでしょうか?
この様な現象をご存じでしたら、解決法をご教授願えないでしょうか?
題名: Re[1]: ダイアログ画面が最前面にならない
著者: まどか
日時: 2006/04/23 22:49:33
ID: 15442
この記事の返信元:
[15441]
ダイアログ画面が最前面にならない
黒犬
2006/04/23 22:46:02
この記事への返信:
[15443]
Re[2]: ダイアログ画面が最前面にならない
黒犬
2006/04/23 22:55:14
ツリーを表示
> 何故なのか原因が分からないのですが、ダイアログがアプリの背後に表示
> されてしまっています。
> ダイアログはモーダル表示なので、必ず最前面表示だと思っていたのですが
必ずという保証はありません。
表示の前後で他のウィンドウを制御するようなことをしていませんか?
題名: Re[2]: ダイアログ画面が最前面にならない
著者: 黒犬
日時: 2006/04/23 22:55:14
ID: 15443
この記事の返信元:
[15442]
Re[1]: ダイアログ画面が最前面にならない
まどか
2006/04/23 22:49:33
この記事への返信:
[15444]
Re[3]: ダイアログ画面が最前面にならない
まどか
2006/04/24 2:13:44
ツリーを表示
■No15442に返信(まどかさんの記事)
> 必ずという保証はありません。
> 表示の前後で他のウィンドウを制御するようなことをしていませんか?
アプリのPictureBoxではGDIでラインの描画を行っていますが
GDI描画が原因でしょうか?
題名: Re[3]: ダイアログ画面が最前面にならない
著者: まどか
日時: 2006/04/24 2:13:44
ID: 15444
この記事の返信元:
[15443]
Re[2]: ダイアログ画面が最前面にならない
黒犬
2006/04/23 22:55:14
この記事への返信:
[15453]
Re[4]: ダイアログ画面が最前面にならない
黒犬
2006/04/24 11:34:46
ツリーを表示
ダイアログを表示するトリガーから表示が完了するまでの間に
ウィンドウの状態にかかわるような処理が無いですか?
ボタンのクリックであればそのイベントハンドラ内でです。
その一連の処理でダイアログの表示以外をコメントアウトするとどうなるでしょうか?
題名: Re[4]: ダイアログ画面が最前面にならない
著者: 黒犬
日時: 2006/04/24 11:34:46
ID: 15453
この記事の返信元:
[15444]
Re[3]: ダイアログ画面が最前面にならない
まどか
2006/04/24 2:13:44
この記事への返信:
[15465]
Re[5]: ダイアログ画面が最前面にならない
まどか
2006/04/24 14:11:23
ツリーを表示
■No15444に返信(まどかさんの記事)
> ダイアログを表示するトリガーから表示が完了するまでの間に
> ウィンドウの状態にかかわるような処理が無いですか?
> ボタンのクリックであればそのイベントハンドラ内でです。
> その一連の処理でダイアログの表示以外をコメントアウトするとどうなるでしょうか?
>
コメントアウトして見ましたが、状況は変わりませんでした。
mdi親画面->mdi親画面内ユーザコントロール->カラーダイアログ
の順で表示しているだけなのですが、一体何が原因なのでしょう?
題名: Re[5]: ダイアログ画面が最前面にならない
著者: まどか
日時: 2006/04/24 14:11:23
ID: 15465
この記事の返信元:
[15453]
Re[4]: ダイアログ画面が最前面にならない
黒犬
2006/04/24 11:34:46
この記事への返信:
[15468]
Re[6]: ダイアログ画面が最前面にならない
黒犬
2006/04/24 15:18:19
ツリーを表示
> mdi親画面->mdi親画面内ユーザコントロール->カラーダイアログ
> の順で表示しているだけなのですが、一体何が原因なのでしょう?
「順」とは一連の流れですか?
ダイアログ表示のトリガー(きっかけとなるアクション)は次とは異なるのでしょうか?
>>>>>>
ユーザーの入力待ちの状態(アプリケーションが何もしていない)で
何らかのアクション(ボタンクリックなど)を起こし、
その中でダイアログを表示する。
<<<<<<
題名: Re[6]: ダイアログ画面が最前面にならない
著者: 黒犬
日時: 2006/04/24 15:18:19
ID: 15468
この記事の返信元:
[15465]
Re[5]: ダイアログ画面が最前面にならない
まどか
2006/04/24 14:11:23
この記事への返信:
[15469]
Re[7]: ダイアログ画面が最前面にならない
まどか
2006/04/24 15:36:42
ツリーを表示
■No15465に返信(まどかさんの記事)
> 「順」とは一連の流れですか?
> ダイアログ表示のトリガー(きっかけとなるアクション)は次とは異なるのでしょうか?
> >>>>>>
> ユーザーの入力待ちの状態(アプリケーションが何もしていない)で
> 何らかのアクション(ボタンクリックなど)を起こし、
> その中でダイアログを表示する。
> <<<<<<
>
はい、まどかさんのご指摘の順番であっています。
@ユーザコントロール内のボタンを押下する
Aカラーダイアログを表示する。
B「OK」が押下されたなら、選択された色を反映させる。
以上の手順で処理をおこなっています。
題名: Re[7]: ダイアログ画面が最前面にならない
著者: まどか
日時: 2006/04/24 15:36:42
ID: 15469
この記事の返信元:
[15468]
Re[6]: ダイアログ画面が最前面にならない
黒犬
2006/04/24 15:18:19
この記事への返信:
[15470]
Re[8]: ダイアログ画面が最前面にならない
まどか
2006/04/24 15:38:02
[15650]
Re[8]: ダイアログ画面が最前面にならない
はいこーん
2006/05/06 13:12:25
ツリーを表示
> @ユーザコントロール内のボタンを押下する
公開可能な範囲で1内のソースを書いてみてください。
しつこいですが
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x As New ColorDialog
With x
.ShowDialog(Me.FindForm)
End With
x.Dispose()
End Sub
これで正常に動作しますか?
題名: Re[8]: ダイアログ画面が最前面にならない
著者: まどか
日時: 2006/04/24 15:38:02
ID: 15470
この記事の返信元:
[15469]
Re[7]: ダイアログ画面が最前面にならない
まどか
2006/04/24 15:36:42
この記事への返信:
[15477]
Re[9]: ダイアログ画面が最前面にならない
黒犬
2006/04/24 21:03:45
ツリーを表示
あ、VBで書いてしまった。。。m(_ _)m
題名: Re[9]: ダイアログ画面が最前面にならない
著者: 黒犬
日時: 2006/04/24 21:03:45
ID: 15477
この記事の返信元:
[15470]
Re[8]: ダイアログ画面が最前面にならない
まどか
2006/04/24 15:38:02
この記事への返信:
[15483]
Re[10]: ダイアログ画面が最前面にならない
まどか
2006/04/25 10:43:17
ツリーを表示
■No15470に返信(まどかさんの記事)
まどかさん、返事が遅くなり申し訳ありません。
あれから以外な事で問題が解決しました。
ダイアログ表示するボタンのあるフォームにあるPictureBoxの
Paintイベントでラインを引いているのですが、ダイアログ表示前に
ライン描画を中止するようにしてみたところ
ダイアログ表示が背後に隠れる現象が発生しなくなりました。
どんな理由でこの様な事になったのか、理由は分かりませんが
GDI描画を止める事で解決できました。
そこで問題が解決方法から、何故こうなったかになるのですが・・・
題名: Re[10]: ダイアログ画面が最前面にならない
著者: まどか
日時: 2006/04/25 10:43:17
ID: 15483
この記事の返信元:
[15477]
Re[9]: ダイアログ画面が最前面にならない
黒犬
2006/04/24 21:03:45
この記事への返信:
[15636]
Re[11]: ダイアログ画面が最前面にならない
黒犬
2006/05/03 13:58:49
ツリーを表示
> ダイアログ表示するボタンのあるフォームにあるPictureBoxの
> Paintイベントでラインを引いているのですが、ダイアログ表示前に
> ライン描画を中止するようにしてみたところ
> ダイアログ表示が背後に隠れる現象が発生しなくなりました。
表示直前でApplication.DoEventsを入れたらうまくいくかな?
あ、ダイアログのせいで再描画要求されてるのか。。。でもZOrderと何の関係があるのかな?
題名: Re[11]: ダイアログ画面が最前面にならない
著者: 黒犬
日時: 2006/05/03 13:58:49
ID: 15636
この記事の返信元:
[15483]
Re[10]: ダイアログ画面が最前面にならない
まどか
2006/04/25 10:43:17
この記事への返信:
[15649]
Re[12]: ダイアログ画面が最前面にならない
黒犬
2006/05/06 11:42:12
[解決]
ツリーを表示
返事が遅れ申し訳ありません。
あれからApplication.DoEvents()等試してみましたが、ダイアログ
表示を行う時は、全てOnPaintイベントでのGDI描画を停止させ
ないと、ダイアログ画面が背後に隠れてしまう事が分かりました。
なんとか解決方法は見つかりはしましたが、根本的原因が分からないと
上司に対して説明できないのでもう少し調べてみるつもりです。
題名: Re[12]: ダイアログ画面が最前面にならない
著者: 黒犬
日時: 2006/05/06 11:42:12
ID: 15649
この記事の返信元:
[15636]
Re[11]: ダイアログ画面が最前面にならない
黒犬
2006/05/03 13:58:49
この記事への返信:
(なし)
ツリーを表示
これだと原因が特定できましたので、書き込みます。
原因ですが、Paintイベント内の最後で
picturebox1.Invalidate(picturebox1.ClientRectangle)
があったのが原因でした。Invalidateを実行すると
ダイアログのメッセージが無視されてしまうようです。
とりあえず、原因が判明しましたのでこれで
解決済みのチェックを付けます。
解決済み!
題名: Re[8]: ダイアログ画面が最前面にならない
著者: はいこーん
日時: 2006/05/06 13:12:25
ID: 15650
この記事の返信元:
[15469]
Re[7]: ダイアログ画面が最前面にならない
まどか
2006/04/24 15:36:42
この記事への返信:
[15651]
Re[9]: ダイアログ画面が最前面にならない
まどか
2006/05/06 21:36:59
ツリーを表示
■No15469に返信(まどかさんの記事)
> .ShowDialog(Me.FindForm)
どうでもいいことかもしれませんが。
FindFormって・・・普通にMeでいいでしやう。
題名: Re[9]: ダイアログ画面が最前面にならない
著者: まどか
日時: 2006/05/06 21:36:59
ID: 15651
この記事の返信元:
[15650]
Re[8]: ダイアログ画面が最前面にならない
はいこーん
2006/05/06 13:12:25
この記事への返信:
(なし)
ツリーを表示
>> .ShowDialog(Me.FindForm)
> FindFormって・・・普通にMeでいいでしやう。
おっと、UserControlということでそう書いたんですが、Handleプロパティがありますねぇ。
VB6の頭で書いちゃいました。
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
いつもお世話になります。
先日の質問後からも設計をしているのですが、テストアプリを作成中に
ラインを引く為に、カラーダイアログを表示させました。
ところがコード上は実行されているのですが、ダイアログが表示され
ないのです。不思議に思いALT+TABで切り替えてみた所
ダイアログが表示されました。
何故なのか原因が分からないのですが、ダイアログがアプリの背後に表示
されてしまっています。
ダイアログはモーダル表示なので、必ず最前面表示だと思っていたのですが
.netでは動作が変わるのでしょうか?
この様な現象をご存じでしたら、解決法をご教授願えないでしょうか?