- - PR -
C#で変数に格納されているフォーム名のフォームを開くには
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-15 10:01
C#で質問があります
プロジェクト内に、form1、form2、form3があり form1からform2をダイアログで開こうと思っています form2 f=new form2(); f.ShowDialog(); とすれば普通に開くのですが string型変数に格納(string OpenFormName="form3"されている 値を使ってフォームを開きたいのですが どのようにすればよいのでしょうか・・・? 下記のようなswitch等を使用せず開きたいのですが・・・ 出来ますでしょうか form f; switch(OpenFormName){ case "form2": f=new form2(); break; case "form3": f=new form3(); break; } f.ShowDialog(); 御教授宜しくお願い致します | ||||||||
|
投稿日時: 2006-12-15 11:05
コンパイル解決が可能な、型を意識したコーディングが望ましいと思います。 Form 名を示した変数を持つこと自体が、あまり良い設計ではないと思うわけです。 どうしてもというのであれば、リフレクションについて調べてみると良いでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-12-15 11:25
ビルダーデザインパターン
C#にそのような機能は無かったと思うし、仮にあったとしても使用には細心の注意が必要です。外部から与えられた文字列にそってインスタンスを生成するということは、データを改竄することで任意のクラスのインスタンスを生成できるということです。そのようなコードは致命的なセキュリティホールの温床となるでしょう。 面倒でもSwitch文等を使って、生成できるインスタンスを明示的に記述するほうが望ましいでしょう。 | ||||||||
|
投稿日時: 2006-12-15 12:54
リフレクションを調査し
http://dobon.net/vb/dotnet/programing/createinstancefromstring.html を参考にして、解決しました 御教授ありがとうございました switch等が良いかと思うのですが、 仕様上無理があるので・・・ あと、 追記質問になってしまうのですが・・・ 自分自身のフルパス(カレントフォルダではなく、exe名まで)の取得方法 自分自身のnamespaceを取得する方法はありますでしょうか? 申し訳ございませんが宜しくお願い致します | ||||||||
|
投稿日時: 2006-12-15 12:54
こんな感じでは駄目でしょうか。
-- あれ、前後しちゃったようですね。 無視してください。 [ メッセージ編集済み 編集者: minminnana 編集日時 2006-12-15 13:11 ] | ||||||||
|
投稿日時: 2006-12-15 13:00
関連のない質問は別スレッドでお願いします。 ヒントは、System.Windows.Forms.Application クラスと System.Type クラスです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-12-15 13:00
Application.ExecutablePath と思います。
その処理を書こうとしているソースコードに書いてあります。 _________________ 囚人のジレンマな日々 |
1