DOBON.NET DOBON.NETプログラミング掲示板過去ログ

後のForm、どうやっ手前に表示するか?

分類:[.NET]

いつもお世話になります。誰が知ってる方でいれば、教えていただきたいんです。

開発環境:VS.NET2003 (VB.NET SmartDeviceApplication)
実行環境:Microsoft Windows CE.Net Version4.10

プログラムはForm1,Form2,Form3があり、それぞれ三つのボタンがあり、実行すると、
Formがそれぞれロードされ、
button1を押せば、Form1が一番手前に表示する。
button2を押せば、Form2が一番手前に表示する。
button3を押せば、Form3が一番手前に表示する。

色々な方法が試しましたが、Formを一番手前に表示するのはうまく行けませんでした。
宜しくお願いします。
■No558に返信(crow001さんの記事)
> 開発環境:VS.NET2003 (VB.NET SmartDeviceApplication)
> 実行環境:Microsoft Windows CE.Net Version4.10
>
> プログラムはForm1,Form2,Form3があり、それぞれ三つのボタンがあり、実行すると、
> Formがそれぞれロードされ、
> button1を押せば、Form1が一番手前に表示する。
> button2を押せば、Form2が一番手前に表示する。
> button3を押せば、Form3が一番手前に表示する。

BringToFrontメソッドでどうですか?
ヘルプを見ると.NET Compact Frameworkもサポートしているみたいですが。
■No560に返信(よねKENさんの記事)
> ■No558に返信(crow001さんの記事)
>>開発環境:VS.NET2003 (VB.NET SmartDeviceApplication)
>>実行環境:Microsoft Windows CE.Net Version4.10
>>
>>プログラムはForm1,Form2,Form3があり、それぞれ三つのボタンがあり、実行すると、
>>Formがそれぞれロードされ、
>>button1を押せば、Form1が一番手前に表示する。
>>button2を押せば、Form2が一番手前に表示する。
>>button3を押せば、Form3が一番手前に表示する。
>
> BringToFrontメソッドでどうですか?
> ヘルプを見ると.NET Compact Frameworkもサポートしているみたいですが。

確かにBringToFrontが.NET Compact Frameworkもサポートしていると思いますが、

以下のように試したところ、うまく行けないんですね。
dim frm1 as new Form1
frm1.BringToFront
> 以下のように試したところ、うまく行けないんですね。
> dim frm1 as new Form1
> frm1.BringToFront

これでは何も起きませんよ。
Newで新たにForm1クラスのインスタンスを作成していますが、
これは既に表示されているForm1クラスのインスタンスとは別物です。
表示されているForm1クラスのインスタンスのBringToFrontメソッドを呼びましょう。
> dim frm1 as new Form1
> frm1.BringToFront
Form1クラスのインスタンスした直後に手前に表示であれば、
こうしてください
dim frm1 as new Form1
frm1.show
frm1.BringToFront()
です。
■No562に返信(よねKENさんの記事)
>>以下のように試したところ、うまく行けないんですね。
>>dim frm1 as new Form1
>>frm1.BringToFront
>
> これでは何も起きませんよ。
> Newで新たにForm1クラスのインスタンスを作成していますが、
> これは既に表示されているForm1クラスのインスタンスとは別物です。
> 表示されているForm1クラスのインスタンスのBringToFrontメソッドを呼びましょう。
どうやって表示されているForm1クラスのインスタンスのBringToFrontメソッドを呼びます?
> どうやって表示されているForm1クラスのインスタンスのBringToFrontメソッドを呼びます?
つまり、dim frm1 as new Form1では、このコードはモジュール範囲内でしかこのクラスを使用できませんよ!と言いたいのです。
したがって、frm1の宣言する場所をもう少し上の位置から宣言しないと、他のところでBringToFrontをしようと思っても当然使えません。
うーーーん、変数宣言やクラスについてもう少し勉強する事をお勧めします。
このままでは、いたちごっこです。
>>表示されているForm1クラスのインスタンスのBringToFrontメソッドを呼びましょう。
> どうやって表示されているForm1クラスのインスタンスのBringToFrontメソッドを呼びます?

旧VBと違って暗黙にインスタンスが生成されることがないので、
VB.NETではインスタンスを自己管理します。
そのため、そのソースコードを書いている本人なら本来は自明のはずなんです(^^;
#逆にそのソースコードを見ていない私にはわかりっこありません。

今、現状のコードの書き方によって、何が最適解かは変わってきます。

そこで質問。
(1)プロジェクトの「スタートアップの設定」はどうなってますか?

Form1等のフォームに設定されているならSub Mainで開始にして、
すべてのフォームのインスタンスを自己管理しましょう。

スタートアップにForm1等を指定している場合、
開発環境のVS.NETがコンパイル段階で内部的にコードの補完を行っていたりするので、
開発環境使ってコード書いていると「自明のはず」のForm1表示部分が
暗黙に生成されていたりして、表示する処理のソースコードが存在しない場合があります。

質問(2)の返答内容によっては、別解もありますが、とりあえずは、
・Sub Mainからの起動する
・ModuleにPublicでForm1〜Form3用の変数を宣言しておく
・その各変数にNewで各フォームをインスタンス化しておく
・さらにそれらの変数でShowメソッドを呼んでフォームを表示するようにしておく
・後は、各ボタンのロジック部分で、その変数.BringToFrontとする
という手が考えられます。

(2)今、現状はどういうコードの書き方をしていますか?
Form1〜Form3をNewしているのはどこですか?
Showしているのはどこですか?

後、最初の質問文にある
> プログラムはForm1,Form2,Form3があり、それぞれ三つのボタンがあり、実行すると、
> Formがそれぞれロードされ、
> button1を押せば、Form1が一番手前に表示する。
> button2を押せば、Form2が一番手前に表示する。
> button3を押せば、Form3が一番手前に表示する。

ですが、button1、button2、button3はそれぞれどのフォームにあるんでしょうか?
(すべてのフォームに同じように配置してある?)
■No568に返信(よねKENさんの記事)
> >>表示されているForm1クラスのインスタンスのBringToFrontメソッドを呼びましょう。
>>どうやって表示されているForm1クラスのインスタンスのBringToFrontメソッドを呼びます?
>
> 旧VBと違って暗黙にインスタンスが生成されることがないので、
> VB.NETではインスタンスを自己管理します。
> そのため、そのソースコードを書いている本人なら本来は自明のはずなんです(^^;
> #逆にそのソースコードを見ていない私にはわかりっこありません。
>
> 今、現状のコードの書き方によって、何が最適解かは変わってきます。
>
> そこで質問。
> (1)プロジェクトの「スタートアップの設定」はどうなってますか?
>
> Form1等のフォームに設定されているならSub Mainで開始にして、
> すべてのフォームのインスタンスを自己管理しましょう。
>
> スタートアップにForm1等を指定している場合、
> 開発環境のVS.NETがコンパイル段階で内部的にコードの補完を行っていたりするので、
> 開発環境使ってコード書いていると「自明のはず」のForm1表示部分が
> 暗黙に生成されていたりして、表示する処理のソースコードが存在しない場合があります。
>
> 質問(2)の返答内容によっては、別解もありますが、とりあえずは、
> ・Sub Mainからの起動する
> ・ModuleにPublicでForm1〜Form3用の変数を宣言しておく
> ・その各変数にNewで各フォームをインスタンス化しておく
> ・さらにそれらの変数でShowメソッドを呼んでフォームを表示するようにしておく
> ・後は、各ボタンのロジック部分で、その変数.BringToFrontとする
> という手が考えられます。
>
> (2)今、現状はどういうコードの書き方をしていますか?
> Form1〜Form3をNewしているのはどこですか?
> Showしているのはどこですか?
>
> 後、最初の質問文にある
>>プログラムはForm1,Form2,Form3があり、それぞれ三つのボタンがあり、実行すると、
>>Formがそれぞれロードされ、
>>button1を押せば、Form1が一番手前に表示する。
>>button2を押せば、Form2が一番手前に表示する。
>>button3を押せば、Form3が一番手前に表示する。
>
> ですが、button1、button2、button3はそれぞれどのフォームにあるんでしょうか?
> (すべてのフォームに同じように配置してある?)
>
有難うございます。解決しました。
■No564に返信(クリリンさんの記事)
>>dim frm1 as new Form1
>>frm1.BringToFront
> Form1クラスのインスタンスした直後に手前に表示であれば、
> こうしてください
> dim frm1 as new Form1
> frm1.show
> frm1.BringToFront()
> です。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板