- PR -

C# フォームアイコン

投稿者投稿内容
NEO
大ベテラン
会議室デビュー日: 2005/10/02
投稿数: 104
投稿日時: 2006-05-24 00:26
フォームにアイコン(画面左隅に出るやつ)を設定する方法なんですが、
通常は、VSのデザイナでプロパティにICOファイルを設定すると思います。

ただ、サブクラス化したフォームクラスはデザイナでは表示できないので、設定できません。
ベースクラスのプロパティで設定するのかと思えばそうでもない。
サブクラス用に、リソースファイルを作成して、それをVSプロジェクトに追加し、
InitializeComponentメソッドで、リソースファイルからIconをGetObjectして設定(this.Iconに代入)しても、デフォルトアイコンのままでした。

これ以上何をすればいいか分かりません。教えてください。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-05-24 00:44
引用:

NEOさんの書き込み (2006-05-24 00:26) より:

ただ、サブクラス化したフォームクラスはデザイナでは表示できないので、設定できません。


あれ?継承フォームでもデザイナは使用できますよね
継承元が抽象クラスになっているのかな

引用:

サブクラス用に、リソースファイルを作成して、それをVSプロジェクトに追加し、
InitializeComponentメソッドで、リソースファイルからIconをGetObjectして設定(this.Iconに代入)しても、デフォルトアイコンのままでした。


アイコンファイルからロードしたらうまくいきますか?
コード:
            this.Icon = new Icon("Icon1.ico");

NEO
大ベテラン
会議室デビュー日: 2005/10/02
投稿数: 104
投稿日時: 2006-05-24 00:54
引用:

あれ?継承フォームでもデザイナは使用できますよね
継承元が抽象クラスになっているのかな



VS2003ですが、フォームクラスをダブルクリックしても「表示できません」のエラーになります。
ちなみに、ベースクラスは抽象クラスではないです。

引用:

アイコンファイルからロードしたらうまくいきますか?
コード:
            this.Icon = new Icon("Icon1.ico");





これって、プログラムを動かすためにICONファイルを動作環境に置く必要がありますよね?
これしか方法がないのなら、仕方ないかも知れませんけど。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-05-24 01:26

引用:

NEOさんの書き込み (2006-05-24 00:54) より:

VS2003ですが、フォームクラスをダブルクリックしても「表示できません」のエラーになります。
ちなみに、ベースクラスは抽象クラスではないです。



おかしいですね、ベースクラスでエラーなんかが起きると
デザイナが開けないことはありますけれど
「表示できません」のエラーについてもう少し詳しい情報ってありますか?


引用:

コード:
            this.Icon = new Icon("Icon1.ico");



これって、プログラムを動かすためにICONファイルを動作環境に置く必要がありますよね?


そうですね、new Icon(ファイル名) で設定するとアイコンファイルが必要になります
リソースファイルの読み込みに失敗しているのか
他の原因でアイコンが読み込めないのか確認したかったんですけどね

リソースマネージャからアイコンをGetObjectしたとき
アイコンはちゃんとロードできていますか?
ウォッチなんかを使って確認してみてください。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2006-05-26 11:49
引用:

ただ、サブクラス化したフォームクラスはデザイナでは表示できないので、設定できません。



かるあさんもご指摘されていますが、表示はできるはずで、ベースにしたクラスに
問題があるのではないかと思われます。

Visual Studioのデザイナでの表示のときに、表示内容を得るためにレンダリング処理が
走りますので、その中で、作られていないオブジェクトを見ているとか、表示するために
はありえない値の変数値になっているとか、依存関係のあるファイルのパスが得られてい
ないとか、そういう理由で表示できないのではないかと思います。

まず、なにも実装していない、空のFormから継承できることを確認してください。
その次に、必要なコードを少しづつ実装してみてください。
だめになったところが原因です。

これを解決すれば、元の質問も解決するのでしょうから、まずはお試しください。

_________________
たつごろー
codeseek
こみゅぷらす
NEO
大ベテラン
会議室デビュー日: 2005/10/02
投稿数: 104
投稿日時: 2006-05-27 12:28
ご紹介いただいた方法はまだ試していません。
サブクラスは、「新規項目の追加」で「継承フォーム」を選んで作成しました。
ベースクラスはDLLで、プロジェクトに参照設定しています。
このやり方がおかしいのですか?
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2006-05-27 14:03
引用:

このやり方がおかしいのですか?


いいえ。

もしかして「ベースクラス」がVisual Studioでのレンダリングができるように作られて
いないのではないですか?
という思いつきを書いただけです。

_________________
たつごろー
codeseek
こみゅぷらす
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-27 14:05
引用:

NEOさんの書き込み (2006-05-24 00:26) より:

ただ、サブクラス化したフォームクラスはデザイナでは表示できないので、設定できません。


サブクラス化したフォームクラスですか?
2005しか使ったことがないので外しているかもしれませんが。

コード:
public class MyForm : System.Windows.Forms.Form {
}



2005 では、クラスとして定義したファイルの先頭に上記のクラスが書かれていないとデザイナが開きません。
この辺りは大丈夫ですか?

引用:

NEOさんの書き込み (2006-05-24 00:26) より:

InitializeComponentメソッドで、リソースファイルからIconをGetObjectして設定(this.Iconに代入)しても、デフォルトアイコンのままでした。


InitializeComponent メソッドの内部を書き換えたってことですよね?
他のプロパティを試しに変更してみて、その値は正常に反映されますか?

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