C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: フォーム名を変数にセットしてフォームを開く方法を教えてくださ


(過去ログ 95 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■56538 / inTopicNo.1)  フォーム名を変数にセットしてフォームを開く方法を教えてくださ
  
□投稿者/ がながな (66回)-(2011/01/18(Tue) 16:21:42)

分類:[.NET 全般] 

VB.NET2008で開発中です。
現在奮闘しているのですが、フォーム名をテキスト型の変数にセットしてそのフォームを開く方法ってありますか?

dim XX as string="F1010FORM"

xx.show()

こんな感じでフォームを開きたいです。
よろしくお願いいたします。
引用返信 編集キー/
■56539 / inTopicNo.2)  Re[1]: フォーム名を変数にセットしてフォームを開く方法を教えてくださ
□投稿者/ PATIO (79回)-(2011/01/18(Tue) 16:46:48)
No56538 (がながな さん) に返信
> VB.NET2008で開発中です。
> 現在奮闘しているのですが、フォーム名をテキスト型の変数にセットしてそのフォームを開く方法ってありますか?
>
> dim XX as string="F1010FORM"
>
> xx.show()
>
> こんな感じでフォームを開きたいです。
> よろしくお願いいたします。

VB自体は詳しくないので外しているかもですが、
一般的に考えたら無理だと思います。
仮にするとしたらフォーム名称とフォームのインスタンスを対にした配列を
作成しておいてフォーム名称で検索して対応するインスタンスを使うくらいでしょうか。
VCではクラス名称を変数で持っておいてクラスのインスタンスを作成するような仕組みは
用意されていないので基本的には上記のような対応になると思います。
まあ、ファクトリパターンとかそういう話なると思いますけれど。

インスタンスを作成するコードをコンパイルする為には、
コンパイル時点で対象のインスタンスを特定できる状態である必要があると言うのは
共通だと思うんですけれど、VBだけ何か仕掛けを持っているとかあるんですかねぇ。>有識者の方

引用返信 編集キー/
■56540 / inTopicNo.3)  Re[1]: フォーム名を変数にセットしてフォームを開く方法を教えてくださ
□投稿者/ マサヤ (224回)-(2011/01/18(Tue) 16:48:07)
フォームから別フォームを開くのならば、インスタンスを生成する必要があるかと。
要件がよくわからないので、詳しくお願いいたします。

引用返信 編集キー/
■56541 / inTopicNo.4)  Re[2]: フォーム名を変数にセットしてフォームを開く方法を教えてくださ
□投稿者/ todo (95回)-(2011/01/18(Tue) 16:56:26)
文字列で指定したクラスのインスタンスを作成するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/386createinstance/createinstance.html
引用返信 編集キー/
■56542 / inTopicNo.5)  Re[1]: フォーム名を変数にセットしてフォームを開く方法を教えてくださ
□投稿者/ shu (369回)-(2011/01/18(Tue) 16:58:54)
No56538 (がながな さん) に返信
> VB.NET2008で開発中です。
> 現在奮闘しているのですが、フォーム名をテキスト型の変数にセットしてそのフォームを開く方法ってありますか?
>
> dim XX as string="F1010FORM"
>
> xx.show()
>
> こんな感じでフォームを開きたいです。
> よろしくお願いいたします。

インスタンス生成するなら
Dim tp as Type = Type.GetType(String.Format("{0}.{1}",RootNameSpace, XX)
Dim frm as Form = Directcast(tp.GetConstructor(Nothing).Invoke(), Form)

frm.Show

または

既定のインスタンスなら
Dim tp As Type = My.Forms.GetType
Dim frm As Form = DirectCast(tp.GetProperty(XX).GetValue(My.Forms, Nothing), Form)

frm.Show

こんなでどうでしょう?
試してはいないです。




引用返信 編集キー/
■56544 / inTopicNo.6)  Re[1]: フォーム名を変数にセットしてフォームを開く方法を教えてくださ
□投稿者/ 魔界の仮面弁士 (2024回)-(2011/01/18(Tue) 17:28:24)
No56538 (がながな さん) に返信
> VB.NET2008で開発中です。
> 現在奮闘しているのですが、フォーム名をテキスト型の変数にセットしてそのフォームを開く方法ってありますか?

http://bbs.wankuma.com/index.cgi?mode=al2&namber=10822&KLOG=24
引用返信 編集キー/
■56546 / inTopicNo.7)  Re[2]: フォーム名を変数にセットしてフォームを開く方法を教えてくださ
□投稿者/ PATIO (80回)-(2011/01/18(Tue) 17:51:48)
2011/01/18(Tue) 17:54:33 編集(投稿者)

No56544 (魔界の仮面弁士 さん) に返信
>>現在奮闘しているのですが、フォーム名をテキスト型の変数にセットしてそのフォームを開く方法ってありますか?
>
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=10822&KLOG=24

なるほど、そういう方法があるわけですね。
VBと言うよりも.NET Frameworkの仕組みみたいですね。

引用返信 編集キー/
■56547 / inTopicNo.8)  Re[3]: フォーム名を変数にセットしてフォームを開く方法を教えてくださ
□投稿者/ shu (370回)-(2011/01/18(Tue) 18:09:58)
No56546 (PATIO さん) に返信
> 2011/01/18(Tue) 17:54:33 編集(投稿者)
>
> ■No56544 (魔界の仮面弁士 さん) に返信
> >>現在奮闘しているのですが、フォーム名をテキスト型の変数にセットしてそのフォームを開く方法ってありますか?
>>
>>http://bbs.wankuma.com/index.cgi?mode=al2&namber=10822&KLOG=24
>
> なるほど、そういう方法があるわけですね。
> VBと言うよりも.NET Frameworkの仕組みみたいですね。
>
CallByNameは Microsoft.VisualBasic名前空間のようなのでVBの仕組みのようです。

引用返信 編集キー/
■56548 / inTopicNo.9)  Re[4]: フォーム名を変数にセットしてフォームを開く方法を教えてくださ
□投稿者/ 魔界の仮面弁士 (2025回)-(2011/01/18(Tue) 18:46:16)
No56547 (shu さん) に返信
>>>>現在奮闘しているのですが、フォーム名をテキスト型の変数にセットしてそのフォームを開く方法ってありますか?
>>>http://bbs.wankuma.com/index.cgi?mode=al2&namber=10822&KLOG=24
>>なるほど、そういう方法があるわけですね。
>>VBと言うよりも.NET Frameworkの仕組みみたいですね。
> CallByNameは Microsoft.VisualBasic名前空間のようなのでVBの仕組みのようです。

ちょっと違います。
shu さん、PATIO さん、それぞれ半分ずつ正解といったところでしょうか。


CallByName 関数が、Microsoft.VisualBasic.Interaction.CallByName メソッドを
差しているという点は正しいです。参照設定さえすれば、C# でも CallByName を使えます。
http://bbs.wankuma.com/index.cgi?mode=red&namber=45301&KLOG=77

しかしだからといって、No56544 / No10825 の方法が VB 以外でも利用できるという
話にはなりません。My.Forms は VB 2005 以降でしか使えない機能だからです。


CallByName は .NET Framework の機能、My.Forms は VB の機能となりますね。

My.Forms の使えない環境の場合は、リフレクションを用いて対応できます。
http://dobon.net/vb/dotnet/programing/createinstancefromstring.html
http://dobon.net/vb/dotnet/programing/typeinvokemember.html

todo さんが紹介された Activator.CreateInstance や、shu さんの GetConstructor なども
リフレクションを用いた方法ですね。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -