- - PR -
フォームの切り替え
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-12-04 16:30
早速ですが、
メインとサブの雛型フォームが2個あるとします。 メインとなる画面に1〜10までのボタンを設置し、1のボタンを押すとサブフォームの型で 新たにフォームを作成して表示(フォームのタイトルは「form1」)、 2を押すとサブフォームの型で新たにフォームを作成して表示(フォームのタイトル は「form2」)するとします。 この時、1のボタンを再度押すと、すでにロード(メイン画面の後ろに表示されている) されているform1を一番前に持っていきたいのですが、 その方法がわかりません。 ハンドルの取得とか、その辺も疎いのですが、どなたか手法をご存知の方、 よろしくお願い致します。 | ||||
|
投稿日時: 2003-12-04 17:54
とりあえず、開発環境とかは書きましょうよ。
Windows? Web? C#? VB.NET? で、Windowsであれば、ベタですが、こんな感じにすればできるかと。 SubForm f1 = null; SubForm f2 = null; ・・・ private void button1_click(object sender, System.EventArgs e) { if(f1 == null) { f1 = new SubForm(); f1.Closed += new EventHandler(f1_Closed); f1.Text = "Form1"; f1.Show(); } else { f1.Activate(); } } private void f1_Closed(object sender, EventArgs e) { f1 = null; } これらを10個書く。共通化できるところは共通化して下さい。 | ||||
|
投稿日時: 2003-12-04 18:59
すいません、言葉足らずでした。C#で通常のwindowsフォームです。
Mainform.cs と Subform.csというフォームファイルがあって処理的には Subform F_subform = new Subform(); F_subform.Show(); というこの2行を使いまわしています。どのボタンを押してもこの処理に飛んでくる 状態です。 「ないとー」さんのように SubForm f1 = null; SubForm f2 = null; という感じでそれぞれ変数を分けるということはしていません。 私の作り方が悪いのかも知れませんが・・・・ 変数1個だけで、どのフォームがロードされているのかを 判断するのは無理なのでしょうか? | ||||
|
投稿日時: 2003-12-04 20:20
どんな動作をさせたいのか見えないのですが、Subformは常に1つなんですか?
たとえば、ボタン1を押して、"Form1"のSubformが表示された後で、ボタン2を押すとどうなるのですか? | ||||
|
投稿日時: 2003-12-05 09:07
お返事ありがとうございます
>どんな動作をさせたいのか見えないのですが、Subformは常に1つなんですか? 雛型ファイルは1つなんですが、表示されるのは複数です。 コピーを作るイメージと言えばよいのでしょうか。 >たとえば、ボタン1を押して、"Form1"のSubformが表示された後で、 >ボタン2を押すとどうなるのですか? もう1個Subformが作成され、表示されます(タイトルはform2 「ボタン2の方が いいかも・・」 です)。 この時点でデスクトップ上にはメイン画面を含め3個のフォームが表示されています。 もし、この後にもう一度ボタン1を押したらタイトル「form1(ボタン1)」のフォームが 最前面に表示され、もう一度ボタン2を押すと、今度はタイトルform2(ボタン2)が 最善面に表示されます。 言い方が不明確かも知れませんが、よろしくお願い致します。 | ||||
|
投稿日時: 2003-12-05 10:01
なるほど、動作は良く分かりました。
でも、ボタンを押した際は、必ず以下の記述が書いてあるメソッド(イベントハンドラ)に飛んでくるんですよね? Subform F_subform = new Subform(); F_subform.Show(); 確かに、この記述を書いてあればボタンを押すたびに、1つのFormが作成され表示されますね。 しかし、Subformの変数が1つであるということは、Subformのオブジェクトを1つしか保持できない(MainFormから操作可能なSubformのオブジェクトは1つだけ)と、いうことでは? つまり、newするたびに、F_subformに格納されるオブジェクトの参照(アドレス)が変わってしまい、それまで格納されていたオブジェクトの参照は失われます。 表示されているSubformはきえませんが、参照が失われ、MainForm側からは操作不能になるということだと思います。 失われる前に、何ボタンで表示されたのかを判別できるようにした上で、何かに退避させておく必要がありますね。 なので、私は、Subform用の変数を複数用意しました。Hashtableに格納してもよいかも。 | ||||
|
投稿日時: 2003-12-05 12:26
どうもダメっぽいですね・・・。複数枚(数は未定)のフォームを雛型から作成した場合、
今回求めていた画面遷移をスマートに走らせる方法があればいいなと思っていたんですが。 やっぱりムリなんですかねー。 いずれにせよ、どうも有難うございました。 | ||||
|
投稿日時: 2003-12-05 13:42
参考までに
ないとーさんのおっしゃるように Hashtableに入れるとこんなかんじです。
| ||||
