- PR -

vb.net windows applicationについて

投稿者投稿内容
にっしー
常連さん
会議室デビュー日: 2004/08/02
投稿数: 21
投稿日時: 2005-02-15 13:29
回答ありがとうございます。

プロジェクトAからプロジェクトBのフォーム遷移ではなくて
プロジェクトは同じなのでファイル名でフォーム起動が
出来ないかなーって思ってたのです。
簡単にファイル名指定ができないのかな?( ̄へ ̄゜)

たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-02-15 13:38
引用:

にっしーさんの書き込み (2005-02-15 12:29) より:
人によってメニュ−の構成を変更したいのです。
そのために同じボタンの場所を押した時に
ログイン者によって遷移する画面を変えたいということなのです。



もしかしたらオーバースペックかもしれませんし、使いにくいのですが、
User Interface Process (UIP) Application Block - Version 2.0
を見てみるといいかも。
いろんなことができる例として、勉強になりますよ。

http://www.codeseek.net/dotNet/dotNetABUIP1.htm
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/uipab.asp

_________________
たつごろー
codeseek
こみゅぷらす
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-02-15 13:40
引用:

プロジェクトAからプロジェクトBのフォーム遷移ではなくて
プロジェクトは同じなのでファイル名でフォーム起動が
出来ないかなーって思ってたのです。
簡単にファイル名指定ができないのかな?( ̄へ ̄゜)


同じアセンブリにあるということですね。
ソースファイルのファイル名がビルド後も残っているかどうかを知る方法について、私は、知らないです。ですので、この件の回答は.NETの偉い人の降臨を待ちましょう。

ソースファイルは単なるクラスの入れ物だからなぁ。
もしも私が今すぐにどうしてもこの方法でやる必要が生じたら、フォーム毎にアセンブリを分けるかな。うーん。でもたぶん、UIPと同じような方法にするか。

_________________
たつごろー http://www.codeseek.net
MCSE MCSD.NET、MCDBA、MCSA、MCAD
Oracle Master Platinum 9i、Oracle Master Linux+



[ メッセージ編集済み 編集者: たつごろー 編集日時 2005-02-15 13:45 ]

[ メッセージ編集済み 編集者: たつごろー 編集日時 2005-02-15 13:52 ]
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-02-15 13:51
こんなのはどうでしょう。

コード:
Dim frm As Form = _
  CType(Activator.CreateInstance(Type.GetType("WindowsApplication1.FormA")), _
  Form)
frm.Show()


にっしー
常連さん
会議室デビュー日: 2004/08/02
投稿数: 21
投稿日時: 2005-02-15 14:00
ご回答どうもありがとうございます。
--------------------------------------------------------------------------------
Dim frm As Form = _
CType(Activator.CreateInstance(Type.GetType("WindowsApplication1.FormA")), _
Form)
frm.Show()
--------------------------------------------------------------------------------
の方法で実際にためしてみましたらうまく出来ました!!
困っていたので本当に助かりました。

その他、ご協力頂きました方大変ありがとうございました。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-02-15 14:30
ユーザー毎にメニューを変えるために、何種類ものForm派生クラスを用意するというのは、ちょっとずれていると思います。ユーザーの数が2〜3でメニュー構成が固定なら良いかもしれませんが、ユーザーの数が増えると間違えなく破綻しますよ。

メニューをユーザー毎に変えたいなら、Forms.MainMenuのインスタンスを自前のコードで生成したら良いじゃないですか。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
にっしー
常連さん
会議室デビュー日: 2004/08/02
投稿数: 21
投稿日時: 2005-02-15 15:04
何種類ものForm派生クラスを用意するというのは
---------------------------------------------------
についてですが、
派生するクラスはひとつでいいです。
あくまでも開くフォームを指定したかったので^^
フォームが開かれればそれでよろしいです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-15 20:43
 画面定義ファイルを作って、それを読み込む。このファイルには必要なパーツの位置が、XMLなどの形式で入っている。

 人によってメニューアイテムやそれによって実行される機能が変わるわけではなく、単に外見を変えたいだけならこれで十分では?

一例:
Form上にテキストボックスとラベルがあり、その位置をシリアライズする
こんな感じでフォームを保存するボタンを用意しておき、不要になったら削除
コード:
[System.Serializable()] public class Form2 : Form
	, System.Runtime.Serialization.ISerializable
{
...
	private void button1_Click(object sender, System.EventArgs e)
	{
		System.Runtime.Serialization.IFormatter formatter
			= new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
		System.IO.FileInfo fileInfo = new System.IO.FileInfo("./app.xml");
		System.IO.Stream stream =null;

		try {
			stream = fileInfo.Open(System.IO.FileMode.Create
				, System.IO.FileAccess.Write, System.IO.FileShare.None);
			formatter.Serialize(stream, this);
		} finally {
			if (stream != null) {
				stream.Close();
			}
		}
	}
	#region ISerializable メンバ

	// 保存
	public void GetObjectData(
		System.Runtime.Serialization.SerializationInfo info
		, System.Runtime.Serialization.StreamingContext context)
	{
		info.AddValue(this.textBox1.Name + ":Location"
			, this.textBox1.Location, typeof(System.Drawing.Point));
		info.AddValue(this.label1.Name + ":Location"
			, this.label1.Location, typeof(System.Drawing.Point));
	}

	// 復元
	protected Form2(System.Runtime.Serialization.SerializationInfo info
			, System.Runtime.Serialization.StreamingContext context) {
		this.textBox1.Location = (System.Drawing.Point) info.GetValue(
			this.textBox1.Name + ":Location", typeof(System.Drawing.Point));
		this.label1.Location = (System.Drawing.Point) info.GetValue(
			this.label1.Name + ":Location", typeof(System.Drawing.Point));
	}

	#endregion

}



_________________

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