条件によって開くフォームをかえるには?

解決


営業to技術  2005-03-04 22:06:31  No: 120049

異動で技術部に配属されたての初心者です。
変な質問かつ文章力が乏しいとは思いますがよろしくお願いします。

現在の画面からFormAを開くとき
Dim f As New FormA
中略
f.Show()
のような記述をする事があると思いますが、上記のようにFormA限定ではなく
引数などで任意のフォームを設定して開くことはできないでしょうか?

あくまでイメージとしてですが例えば、サブルーチンやクラスで
Private Sub XXX(ByVal frmName as System.Windows.Forms.Form)
Dim f As New frmName
中略
f.Show()
のような感じで条件によって開くフォームを変えたいのですが。
ちなみに↑だとfrmNameが型エラー(定義されてない)になるみたいですが。


特攻隊長まるるう  2005-03-04 22:17:17  No: 120050

主流は[VB6.0]か[VB.NET]ですが、コードがかなり違いますので
自分の開発環境を書くようにして下さい。

[VB.NET]なら過去ログ検索『継承』とか。
『別フォーム』とか…本当に知識が無いなら『フォーム』で引っ掛かる
全てのスレッドに目を通すぐらいの気持ちが欲しいですねぇ。


  2005-03-04 22:58:05  No: 120051

久しぶりに書き込みました。横から失礼します。

え、と。
イメージの書き方から、恐らくVB.NETではないでしょうか・・・?

判断材料となる値(なのか?)を与えて、呼び出し先で判断させたらいかがですか?
(考察基準はVB6.0です。VB.NETでは駄目かも・・・。)

それにしても、VB6.0に慣れた人間には、VB.NETは厳しいです。
現在も苦戦中・・・。


営業to技術  2005-03-04 23:31:50  No: 120052

特攻隊長まるるうさん返信恐れ入ります。

開発環境はVB.NETです。PCは社内勉強用のマシンでOSもW2Kで
メモリ等を含めVisualStudio.NET推奨環境ギリギリのようです。

今は勉強課題としてフォームデザインのみされている社内用のちょっと
したシステムを二名で作成してるのですが、以前に勉強してた人のもの
らしき作成途中のコード(最初の書込みのコードですが)等を発見しては
参考にしながらといった感じです。
今回質問した経緯としましては、メニュー画面のメニュー数が10個以上
ありそれぞれのButton_Clickで似たような共通処理を記述するのも効率
が悪いと思い、サブルーチンやクラスの勉強をしながら処理をまとめら
れないか?と思った次第です。

>『フォーム』で引っ掛かる全てのスレッド
とまではいきませんが、午前中にある程度過去ログは見てみたのですが
該当スレッドは見つけられませんでした。

特攻隊長まるるうさんの仰る事ももっともですので以後気をつけます。
初心者掲示板だからといって軽い気持ちで書込みしましたが私達の場合
はそれ以前の初心者だったようで…

それでも尚、今回の質問に関してご教授願える事があれば幸いです。
随分と長い文章になり申し訳ありません。


魔界の仮面弁士  2005-03-04 23:38:51  No: 120053

文字列で指定するなら、こんな感じでしょうか。
http://yaplog.jp/orator/archive/39


じゃんぬねっと  URL  2005-03-04 23:53:50  No: 120054

もう書いちゃってますけど、

> System.Windows.Forms.Form

を見る限りでは VB.NET だとわかりますよね?

ところで、リフレクション何かが絡むのは、あまりお勧めしませんよ。


魔界の仮面弁士  2005-03-04 23:57:09  No: 120055

最初から型を渡しても良いかな。

Dim F As Form
F = OpenForm(GetType(Form2))

Public Function OpenForm(ByVal FormType As Type) As Form
   OpenForm = DirectCast(FormType.GetConstructor(New Type() {}).Invoke(Nothing), Form)
   OpenForm.Show()
End Function


営業to技術  2005-03-05 01:36:55  No: 120056

皆さん様々なアドバイス有難うございました。
魔界の仮面弁士さん、サンプルコードすごく参考になりました。

最後に余談ですが、この掲示板を知ってから
特攻隊長まるるうさん、じゃんぬねっとさん、魔界の仮面弁士さんの
御三方は私達の間では有名なんで今回の質問に対して御三方から返信
いただけてラッキーでした。もちろん影さんも有難うございました。

また質問する事になると思いますが、その時はよろしくお願いします。


特攻隊長まるるう  2005-03-05 01:46:22  No: 120057

ああ、先に解決しましたか…一応、回答補足…

>もう書いちゃってますけど、
>> System.Windows.Forms.Form
>を見る限りでは VB.NET だとわかりますよね?
そりゃ分かってますよ(^^;)だから[VB6.0]の回答を書かず、
まず、過去ログ検索『継承』をしろと回答してあるでしょ?
でも、そんな事を言っちゃうと、どんどん手抜きの質問が
増えちゃうんですよぉ(滅)。最初が肝心なの!(><)

…で、まぁ、回答が結構ついてるので一生懸命レスつけませんがw
クラス単位の考え方を身に付けてもらいたいので該当スレッドだけ
読むのではなく、関連スレッドも読んでいただきたい…そーゆー
思惑もあって過去ログ検索を推奨してます。イジワルじゃナイのぉ
分かってねぇw?
過去ログ検索『継承』で引っ掛かる該当スレッドは↓
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200408/04080006.txt
↑はちょっと古いので手法が稚拙な部分がありますm(__)m
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200502/05020048.txt
の最後の書き込み
>ねろ 2005/02/12(土) 12:00:38
とかも合わせて参考にしていただければと思ってますが…

任意のフォームを”表示するだけ”なら
[VB.NET]
Private Sub XXX(ByVal frmName as System.Windows.Forms.Form)
    frmName.Show()
End Sub
でできちゃいませんか?
で、引数名で frmName なんて書いてるって事はそのうち『文字列で
指定したフォームを表示できませんか?』とか言い出すでしょう(?)
で、その回答は魔界の仮面弁士さんのレスとなります。

順に理解していって下さいなー。


じゃんぬねっと  URL  2005-03-05 03:12:53  No: 120058

>特攻隊長まるるう さん
ひぇぇ... ごめんなさい。
まるるう さんに逆らうだなんて、100年早い話ですよ (^^

それより

> 特攻隊長まるるうさん、じゃんぬねっとさん、魔界の仮面弁士さんの
> 御三方は私達の間では有名なんで

私は、弁さんや、まるるうさんと同じ場所に連ねるほどの者ではありません (^-^*)

# 去年の冬からの新参者ですし...


・・・  2005-03-05 19:48:44  No: 120059

・・・。
http://www.google.co.jp/search?num=20&hl=ja&newwindow=1&c2coff=1&q=%E3%81%98%E3%82%83%E3%82%93%E3%81%AC%E3%81%AD%E3%81%A3%E3%81%A8&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
http://www.google.co.jp/search?num=20&hl=ja&newwindow=1&c2coff=1&q=%E9%AD%94%E7%95%8C%E3%81%AE%E4%BB%AE%E9%9D%A2%E5%BC%81%E5%A3%AB&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
http://www.google.co.jp/search?num=20&hl=ja&newwindow=1&c2coff=1&q=%E7%89%B9%E6%94%BB%E9%9A%8A%E9%95%B7%E3%81%BE%E3%82%8B%E3%82%8B%E3%81%86&lr=lang_ja


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加