C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: フォームの最前面表示したい


(過去ログ 26 を表示中)

[トピック内 16 記事 (1 - 16 表示)]  << 0 >>

■12272 / inTopicNo.1)  フォームの最前面表示したい
  
□投稿者/ マルコ (1回)-(2008/01/07(Mon) 10:27:13)

分類:[VB.NET/VB2005] 

開発言語:Microsoft2003 .net2003 ver 7.1.3091
:Microsoft.NET Framework1.1 ver 1.1.4322

質問: 親フォームからボタンで子フォームをモードレスで表示しています。
    複数の子フォームが開ける仕様なのですが、子フォームを複数(4画面)開いて
    ある1つの子フォームをクリックした時に最前面表示したいのですが。
    Topmostメソッドでは、最前面に表示されません。
Microsoft2005 VB2005では最前面に表示されたのですが
    2003ではできないのでしょうか?

引用返信 編集キー/
■12275 / inTopicNo.2)  Re[1]: フォームの最前面表示したい
□投稿者/ やじゅ (7回)-(2008/01/07(Mon) 12:01:15)
No12272 (マルコ さん) に返信
>     Topmostメソッドでは、最前面に表示されません。
> Microsoft2005 VB2005では最前面に表示されたのですが
>     2003ではできないのでしょうか?
>

2003→2005でそのような変更は無かったと思いますので、出来ると思います。
引用返信 編集キー/
■12276 / inTopicNo.3)  Re[1]: フォームの最前面表示したい
□投稿者/ Tom Yama (1回)-(2008/01/07(Mon) 13:21:27)
No12272 (マルコ さん) に返信
>     Topmostメソッドでは、最前面に表示されません。
System.Windows.Forms.Form には、TopMostメソッドなんてありません。プロパティならありますが?

ちなみに、TopMostプロパティがTrueのフォームが、Falseのフォームより前にくることは保障されていますが、
TopMostプロパティをTrueにした瞬間に最前面にくるなんてことは、保障されていないと思います。

>     ある1つの子フォームをクリックした時に最前面表示したいのですが。
通常は、Activateメソッドを使用するのでは?
引用返信 編集キー/
■12277 / inTopicNo.4)  Re[2]: フォームの最前面表示したい
□投稿者/ マルコ (2回)-(2008/01/07(Mon) 14:10:55)
>■No12276 (Tom Yama さん) に返信
> ちなみに、TopMostプロパティがTrueのフォームが、Falseのフォームより前にくることは保障され>ていますが、
> TopMostプロパティをTrueにした瞬間に最前面にくるなんてことは、保障されていないと思います。
回答ありがとうございます。
上記の回答で子フォームのTopMostプロパティがfalseになっているものに対して、topMostをtrueに
することで最前面にくるのでしょうか?
現在、子フォームのクリックイベントの中で、me.Topshow=Trueを記述して、最前面の表示をして
いるのですが間違っているのでしょうか?
子画面をshowした後に、TopMostをfalseにする必要がありますか?
忙しいところすみませんが宜しくお願いします。

引用返信 編集キー/
■12279 / inTopicNo.5)  Re[3]: フォームの最前面表示したい
□投稿者/ Hirotow (115回)-(2008/01/07(Mon) 14:24:47)
おそらく、子フォームのTopMostを設定した上でActivateを呼び出して前面に持ってくるのが一番適当だと思います。
こうすることで子フォームが最前面に表示され、親フォームやほかのウィンドウなどの裏にも隠れなくなります。
引用返信 編集キー/
■12281 / inTopicNo.6)  Re[4]: フォームの最前面表示したい
□投稿者/ マルコ (3回)-(2008/01/07(Mon) 15:19:45)
2008/01/07(Mon) 15:20:52 編集(投稿者)
2008/01/07(Mon) 15:20:37 編集(投稿者)

No12279 (Hirotow さん) に返信
> おそらく、子フォームのTopMostを設定した上でActivateを呼び出して前面に持ってくるのが一番適当だと思います。
> こうすることで子フォームが最前面に表示され、親フォームやほかのウィンドウなどの裏にも隠れなくなります。

Public Class Form1
Inherits System.Windows.Forms.Form
private Sub MenuItem1_Click(by.......)
' メニューより、子画面を開く
  dim 子フォーム as new Form2
  子フォーム.show
end sub
private Sub Form1_Click(by.......)
'フォームをクリックした時に最前面に表示
me.Activate()
me.TopMost=True
end sub
end class

Public Class 子フォーム2
Inherits System.Windows.Forms.Form
private Sub 子フォーム2_Click(by.......)
'フォームをクリックした時に最前面に表示
me.Activate()
me.TopMost=True
end sub
end class

上記のような記述でやってみたのですが、子フォームを4画面開いたのですが
うまくいきません。記述のしかたがおかしいのでしょうか?

引用返信 編集キー/
■12282 / inTopicNo.7)  Re[5]: フォームの最前面表示したい
□投稿者/ Tom Yama (2回)-(2008/01/07(Mon) 15:49:08)
No12272 (マルコ さん) に返信
>     ある1つの子フォームをクリックした時に最前面表示したいのですが。
ところで、何もしなくても、普通は、こうなりますよね?

引用返信 編集キー/
■12285 / inTopicNo.8)  Re[6]: フォームの最前面表示したい
□投稿者/ Hirotow (118回)-(2008/01/07(Mon) 15:59:55)
何がしたいのかが具体的にわかりません。
単に子ウィンドウを最前面にしたいのであれば表示前に設定しておけば良いわけで。
引用返信 編集キー/
■12286 / inTopicNo.9)  Re[5]: フォームの最前面表示したい
□投稿者/ まどか (427回)-(2008/01/07(Mon) 16:01:08)
書かれたコードでは何をやりたいのかがよくわかりません。(Form1.TopMostも設定してるし。。。)
TopMost プロパティはデスクトップ上で最上層(一番手前)に常に表示させたい(後ろへ行かせたくない)という目的です。
つまり、通常はその対象は「ひとつ」のはずです。(瞬間的には)

Showメソッドの引数にMe(Form1)を指定すれば、Form1の後ろへ行くことはなくなりますが
そういうことではない?
引用返信 編集キー/
■12289 / inTopicNo.10)  Re[7]: フォームの最前面表示したい
□投稿者/ マルコ (4回)-(2008/01/07(Mon) 17:50:57)
No12285 (Hirotow さん) に返信
> 何がしたいのかが具体的にわかりません。
> 単に子ウィンドウを最前面にしたいのであれば表示前に設定しておけば良いわけで。

回答していただきありがとうございます。
何がしたいか?については、一般にデスクトップ上で
親フォーム、子フォームがモードレスで複数開いている状態で
目的のフォーム(親もしくは子)をクリックしたら
最前面でアクティブに表示したい。これだけです。

具体的には、子フォームは照会画面です。
親フォームは、入力画面です。
親フォームの参照ボタンから子フォームが開きます。
開かれた子フォームの照会内容を参照しながら、
親フォームの入力項目に入力する仕様になっています。

宜しくお願いいたします。

引用返信 編集キー/
■12290 / inTopicNo.11)  Re[8]: フォームの最前面表示したい
□投稿者/ Hirotow (119回)-(2008/01/07(Mon) 18:02:08)
それならば子フォームのデザイナ画面でTopMostを設定しておき、
参照ボタンのクリック時に子フォームをShowすればいいはずです。
また子フォームの初期化が重たい場合は子フォームのOnClosingでthis.Hide();e.Cancel=true;returnとしておくと閉じても隠れるだけなので次回にすばやく表示できます。
引用返信 編集キー/
■12291 / inTopicNo.12)  Re[8]: フォームの最前面表示したい
□投稿者/ まどか (428回)-(2008/01/07(Mon) 18:04:55)
#「最前面」という言葉がネックかな。

TopMost プロパティはデスクトップ上にあるウィンドウの重なり順を常に一番上に保つという動作です。
つまり、通常その対象はそのタイミングで「ひとつ」のはずです。>「一番」はひとつしかない

もうひとつ、オーナーフォームという動作があります。
先に書きましたが、Show メソッドの引数に親フォームを指定します。
これはShowしたフォームが親フォームの後ろにいかなくなるという動作です。

書かれた要望からは後者でいいような気がします。

引用返信 編集キー/
■12292 / inTopicNo.13)  Re[9]: フォームの最前面表示したい
□投稿者/ まどか (429回)-(2008/01/07(Mon) 18:08:59)
> つまり、通常その対象はそのタイミングで「ひとつ」のはずです。>「一番」はひとつしかない

うそ書きました。m(_ _)m
忘れてください。

でも、「デスクトップ上でTopMost」なので、そうしたいかどうかですね。
引用返信 編集キー/
■12295 / inTopicNo.14)  Re[8]: フォームの最前面表示したい
□投稿者/ Tom Yama (3回)-(2008/01/07(Mon) 18:40:13)
No12289 (マルコ さん) に返信
> 何がしたいか?については、一般にデスクトップ上で
> 親フォーム、子フォームがモードレスで複数開いている状態で
> 目的のフォーム(親もしくは子)をクリックしたら
> 最前面でアクティブに表示したい。これだけです。
それが、既定の動作です。
ですから、何もしなければ(何もコードを書かなければ)、そういう風に動作するはずです。
引用返信 編集キー/
■12303 / inTopicNo.15)  Re[9]: フォームの最前面表示したい
□投稿者/ れい (353回)-(2008/01/07(Mon) 20:42:52)
たぶん、他のフォームがTopMostになってるから
アクティブなフォームが最前面に表示されなくなってしまってるのではないでしょうかね。

無駄にTopMostを使ってるような気がします。



引用返信 編集キー/
■12336 / inTopicNo.16)  Re[10]: フォームの最前面表示したい
□投稿者/ マルコ (5回)-(2008/01/08(Tue) 10:40:12)
No12303 (れい さん) に返信
> たぶん、他のフォームがTopMostになってるから
> アクティブなフォームが最前面に表示されなくなってしまってるのではないでしょうかね。
>
> 無駄にTopMostを使ってるような気がします。
>
たくさんの回答本当に感謝しています。
れいさんの回答で無駄にTOPMOSTを使っているとありましたが
子フォームのClickイベントの中でtopmostを定義してました。
あえて定義する必要がないということですよね。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -