- PR -

フォームの切り替え

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-05 13:54
 Controlを継承するコントロールには、Tagという『コントロールに関するデータを格納するオブジェクトを取得または設定』するプロパティがあるので、作ったフォームをここに格納する。。。

sub eventhandler hadles button.click
if typeof sendere is system.windows.forms.control then
dim cntrl as ...control = ctype(sender, ...control)
if cntrl.tag is nothing then
cntrl.tag = new フォーム
その他の処理
else
dim frm as フォーム = ctype(cntrl.tag, フォーム)
frm.active
endif
endif
end sub

不要になったら解放し、nullを代入のこと。
ないとー
会議室デビュー日: 2002/08/29
投稿数: 9
投稿日時: 2003-12-05 17:01
確かにButton(Control)のTagを使うとスマートにかけそうですね。

Subformが閉じられたら該当のButtonのTagにnull(VB.NETならnothing)をセットしなければいけないと思うので、こんな風にしてみました。
双方のTagに入れあっているので、気持ち悪いですが・・・。
他によい方法が浮かばなかった・・・(--;)

private void button_Click(object sender, System.EventArgs e)
{
SubForm form = null;
if(((Button)sender).Tag == null)
{
form = new SubForm();
form.Tag = sender;
form.Closed += new EventHandler(form_Closed);
form.Text = ((Button)sender).Text;
form.Show();
((Control)sender).Tag = form;
}
else
{
((Form)((Button)sender).Tag).Activate();
}
}
private void form_Closed(object sender, EventArgs e)
{
((Control)(((Control)sender).Tag)).Tag = null;
}

本当はisとかasとかでチェックするべきですが、面倒なので、今回はキャストしまくりです。ご勘弁を。
たぬき
会議室デビュー日: 2003/06/04
投稿数: 16
投稿日時: 2003-12-08 10:42
お返事が送れて申し訳ありません

ナキオさん
Jittaさん
ないとーさん

わざわざ回答のための時間を取って頂いてありがとう御座います。
やり方、色々あるんですね。かなり勉強になりました。
回答の方法で色々試して見ますね。

どうもありがとう御座いました。

 

スキルアップ/キャリアアップ(JOB@IT)