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

AnyFormを作りたい…。

分類:[.NET]

初めまして。ボンと申します。
今までVB6で行なっていたFormsコレクションの技が使えなくなったので
Googleなどで探していたのですが、どうに出来ないのでこちらに質問をさせてください。

Dim AnyForm as Form

このような定義をした後

AnyFormを自分の使いたいFormとして利用する方法を探していました。
指定するのは、FormのNameで行ないたいです。

例えば、プロジェクト内に3つのFormが存在するとした場合

frmTest1
frmTest2
frmTest3
というそれぞれの名前で

AnyForm = New frmTest1
AnyForm = New frmTest2
AnyForm = New frmTest3
とやればOKなのですが

AnyForm = New xxxx←ここを動的に指定したい場合は、どのように行なえばよろしいのでしょうか…。
ここでハマっています。

どなたかご教授頂けないでしょうか。
よろしくお願いいたします。
環境を書いておりませんでした。
申し訳ありません。
WindowsXP SP2 / VB.NET
です。
■No7762に返信(ボンさん)

過去ログとか見ましたか?
遅延バインディングでも使ってみますか?
お勧めできませんが。
> 過去ログとか見ましたか?
Form絡みで検索はしました。一応。

> 遅延バインディングでも使ってみますか?
> お勧めできませんが。
申し訳ありません。遅延バインディングとはどのような方法なのでしょうか?
詳しくお教えいただけたら幸いです。
■No7766に返信(ボンさんの記事)
> > 過去ログとか見ましたか?
> Form絡みで検索はしました。一応。

一応・・・ですか?

沢山出てきますが、全部見たんですね? :p
http://dobon.net/cgi-bin/vbbbs/srch.cgi?no=0&word=Form&andor=and&logs=all&PAGE=20

まあ、それでもヒットはするはずですけどね。


> 申し訳ありません。遅延バインディングとはどのような方法なのでしょうか?
> 詳しくお教えいただけたら幸いです。

わからないことは、まずご自分で検索してください。:-)

 http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=6132&no=0&KLOG=2

の、深山氏の発言を参考にしてください。
> 沢山出てきますが、全部見たんですね? :p
> http://dobon.net/cgi-bin/vbbbs/srch.cgi?no=0&word=Form&andor=and&logs=all&PAGE=20
自分の探しているものにヒットしていないと思ったのですが、違ってましたかね。
もう一回全て読んでみます。
記事投稿の前に検索するのが礼儀だと思ってましたので。

> まあ、それでもヒットはするはずですけどね。
えぇ。ヒットはしますね。
ただ、自分の欲しい内容にヒットしているかどうかは別問題ですよね。

>>申し訳ありません。遅延バインディングとはどのような方法なのでしょうか?
>>詳しくお教えいただけたら幸いです。
>
> わからないことは、まずご自分で検索してください。:-)
>
>  http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=6132&no=0&KLOG=2
>
> の、深山氏の発言を参考にしてください。
お忙しい所ありがとうございました。
#話が噛み合ってないような(^_^;)


> AnyForm = New xxxx←ここを動的に指定したい場合は、どのように行なえばよろしいのでしょうか…。

 こういうことでしょうか?

文字列で指定されたクラスのインスタンスを作成する
http://dobon.net/vb/dotnet/programing/createinstancefromstring.html


#試したことないですけど、 Assembly.CreateInstance メソッドでもいけそうな気がします。
深山さんこんにちは。
レスありがとうございます。

>>AnyForm = New xxxx←ここを動的に指定したい場合は、どのように行なえばよろしいのでしょうか…。
>
>  こういうことでしょうか?
>
> 文字列で指定されたクラスのインスタンスを作成する
> http://dobon.net/vb/dotnet/programing/createinstancefromstring.html
大変申し訳ありません、私の説明不足ですね…。
深山さんのおっしゃるとおりです。
文字列で指定されたクラスのインスタンスを作成する。
このように書けばよかったのですね。
すいませんでした…;;


> #試したことないですけど、 Assembly.CreateInstance メソッドでもいけそうな気がします。
■No7770に返信(深山さんの記事)
> > AnyForm = New xxxx←ここを動的に指定したい場合は、どのように行なえばよろしいのでしょうか…。
>
>  こういうことでしょうか?
>
> 文字列で指定されたクラスのインスタンスを作成する
> http://dobon.net/vb/dotnet/programing/createinstancefromstring.html

そっかぁ・・・ 確かにそちらの方が意図として正しいですね。

# > AnyForm
# にばかり気をとられていた・・・

ちゃんと質問内容を読んでなかったみたいです。
わざわざ、フォローさせてしまい、申し訳ありません。(2回目w)
  • 題名: Re[2]: AnyFormを作りたい…。
  • 著者: 小野@どっとねっとふぁん
  • 日時: 2004/12/01 18:01:23
  • ID: 7773
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No7770に返信(深山さんの記事)
>>AnyForm = New xxxx←ここを動的に指定したい場合は、どのように行なえばよろしいのでしょうか…。
>
>  こういうことでしょうか?
> 文字列で指定されたクラスのインスタンスを作成する
> http://dobon.net/vb/dotnet/programing/createinstancefromstring.html

CreateInstanceでやっちゃうと、その後のメソッドよびだしとか
すべてリフレクションでやらないといけなくなるよーな。
となると、すごく面倒なプログラムになると思います。

Factoryパターンというほどでもないけど、必要なクラスを
生成して返すメソッドを一つ間にいれてやればいいのかな、
という気がします。
まぁ、その後そのインスタンスをどう使うかにもよると
思いますが。
>ちゃんと質問内容を読んでなかったみたいです。
分かり難い表現で書いてしまったようで、申し訳なかったです。
皆様ありがとうございました。
Public Function frm_GetForm(ByVal strFormName As String) As System.Windows.Forms.Form
Dim t As Type = Type.GetType("空間名." & strFormName)
frm_GetForm = t.InvokeMember(Nothing, System.Reflection.BindingDlags.CreateInstance, Nothing, Nothing, Nothing)
End Function

これの関数を間に噛ますことで、対応できたみたいです。
こんなことに2時間も悩んだことは内緒です;;

今日から始めたのですが、なかなか難しいですね^^;
解決済み!

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