- PR -

カスタムコントロールから、デザイン時にプロジェクトのパスを取得する方法

投稿者投稿内容
おとぼけ父ちゃん
会議室デビュー日: 2008/11/25
投稿数: 9
投稿日時: 2008-11-25 16:37
いつもお世話になっております。

Windowsフォーム用のカスタムコントロールを作成しています。
作成しているカスタムコントロールのプロパティ内容を外部ファイルから読み込むようにしたいのですが、デザイン時にカスタムコントロールを使用するプロジェクトのパスを取得する方法が分からず困っています。

何か良い方法はないでしょうか
よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-11-25 19:36
引用:

おとぼけ父ちゃんさんの書き込み (2008-11-25 16:37) より:

作成しているカスタムコントロールのプロパティ内容を外部ファイルから読み込むようにしたいのですが、デザイン時にカスタムコントロールを使用するプロジェクトのパスを取得する方法が分からず困っています。


普通はパスの設定をプロパティにすれば良いので、カスタム コントロールはプロジェクトのパスを知らなくて良いと思いますが。 もし設定させず固定で持つのであれば、それは外部ファイルではなく埋め込んでおくべきですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
おとぼけ父ちゃん
会議室デビュー日: 2008/11/25
投稿数: 9
投稿日時: 2008-11-25 23:15
回答ありがとうございます。

カスタムコントロールで次の内容を実現したいと思っております。
1.見た目に関するプロパティ群を外部ファイルにて状態名とともに保持しデザイン時にカスタムコントロールに状態名を指定することでプロパティ群を一括で設定
2.プロジェクト内のすべてのフォームで同一の外部ファイルの内容を読み込むことで全フォームの見た目を一元管理する

この内容を実現するために、現在はカスタムフォームを作成しプロパティにプロジェクトのパスと外部ファイル名をセットしているのですが、複数人で開発を行う場合にフォームのプロパティにプロジェクトパスをセットしているためすべての開発環境のディレクトリ構成を統一する必要があり困っています。

デザイン時のコントロールをデバッグしたところ、Assemblyから実行中のパスを取得するとIDEのパスが戻されてしまいます。

IDEでは、現在オープンしているプロジェクトの情報を持っていると思っているのですがその情報を取得する方法がわかりません。

何か良い方法がありましたら教えてください。
よろしくお願いいたします。
にー
常連さん
会議室デビュー日: 2006/04/30
投稿数: 35
投稿日時: 2008-11-25 23:55
こんばんは。

デザイン時でなく、実行時にじゃんぬねっとさんのやり方を
行うので良いような気がしますが、デザイン時にしたい理由
は何なのでしょう。

また、ソースの一部を記載してもらえれば、お力になれるかも
しれません。
108
常連さん
会議室デビュー日: 2007/12/12
投稿数: 45
投稿日時: 2008-11-26 09:07
引用:
すべての開発環境のディレクトリ構成を統一する必要があり困っています。


すべきではないのでしょうか?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2008-11-26 09:32
引用:

作成しているカスタムコントロールのプロパティ内容を外部ファイルから読み込むようにしたいのですが


カスタム コントロールのアプリケーション構成ファイル(app.config)に持てばよいのでは?
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-11-26 10:18
カスタムコントロールのあるプロジェクトと、それを利用している Windows フォームのあるプロジェクトは別ということであってますか?

引用:

todoさんの書き込み (2008-11-26 09:32) より:
引用:

作成しているカスタムコントロールのプロパティ内容を外部ファイルから読み込むようにしたいのですが


カスタム コントロールのアプリケーション構成ファイル(app.config)に持てばよいのでは?



そのうえで、Windows フォームのあるプロジェクトのアプリケーション構成ファイル(app.config)に、カスタムコントロール用のセクションを用意します。(カスタムコントロール側の app.config からコピーしてくるのが手っ取り早いでしょう)
そうすれば、app.config(正確には アセンブリ名.exe.config)を書き換えることで設定を変更することができます。

皆さんが仰る通り、プロジェクトのパスを持つ必要はありませんし、持つべきでもないと思います。
おとぼけ父ちゃん
会議室デビュー日: 2008/11/25
投稿数: 9
投稿日時: 2008-11-27 10:33
引用:

にーさんの書き込み (2008-11-25 23:55) より:
こんばんは。

デザイン時でなく、実行時にじゃんぬねっとさんのやり方を
行うので良いような気がしますが、デザイン時にしたい理由
は何なのでしょう。

また、ソースの一部を記載してもらえれば、お力になれるかも
しれません。



回答ありがとうございます。
デザイン時に外部ファイルを読み込みたいのは、見た目に関するプロパティ群を管理しデザイン時にコントロールに適用し見た目を確認したいからです。

現在の内容
カスタムコントロールと同じDLLにStaticのManagerクラスを作成しており
Managerクラスに外部ファイルより見た目プロパティ群を保持し
カスタムコントロールには、ViewPropプロパティを追加し見た目プロパティ群の状態名の一覧を表示し、デザイン時に選択するようにしています。

見た目プロパティ群の内容
TextBox.通常
BackColor = white
ForeColor = Black
TextBox.必須
BackColor = blue
ForeColor = white
のような形で、通常/必須が状態名としViewPropプロパティで選択することで
TextBoxのBackColor/ForeColorを同時にセットしています。

今回問題となっているのは、カスタムコントロールを使用するプロジェクトでフォームデザイナで表示したときに、Managerクラスに外部ファイルを読み込み見た目プロパティの値をセットしたいのですが、外部ファイルの場所をカスタムフォームにProjectPathプロパティにセットしないと読み込むことができません。

これを、IDEで開いているプロジェクトのパスを取得する方法があればProjectPathプロパティなしで外部ファイルを読み込めるようにしたいと考えています。

現在、カスタムフォームデザイナークラスにて
private string ProjectPath
{
get
{
return _projectPath;
}
set
{
_projectPath = value;
LoadViewProperty();
        // ここで外部ファイルを読み込み見た目関連のプロパティ群を保持しています。
}
}

説明がうまくできないで申し訳ありません。
何かよい方法はないものでしょうか

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