- - PR -
VS2005でのデザインモードで
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-24 13:27
はじめまして。
現在VS2005でWindowsアプリケーションを開発しています。 言語はVB.NETです。 ボタンが複数あるユーザーコントロールを作成し、 各ボタンのフォントを設定できるようにFontクラスの配列をプロパティとして用意したのですが、 (各ボタンのフォントを配列にセットしています。) そのユーザーコントロールをフォームに貼り付け、 デザインモードでそのプロパティを操作すると、コレクションエディタという フォームが出てくるのですが、 エラーが発生しているようで各ボタンのプロパティが取得・変更できません。 原因がわからず対処のしようがなく困っています。 どなたかご教授願えませんでしょうか? よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2006-11-24 15:11
どのようなエラーが発生しますか? おそらく、配列のインスタンスがらみの例外かと思いますが。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-11-24 15:48
"オブジェクトがターゲットの型と一致しません。"と表示されます。
コードを交えてもう少し詳しく説明しますと。 ユーザーコントロールにはボタンを複数配置してあります。 そのボタンを初期化時にSystem.Windows.Forms.Buttonクラスの配列にセット(cmdArray)しています。 プロパティaryFont取得時はワーク変数のFontクラスの配列(ary_font)にcmdArrayの各要素のFontをセットして、その配列を返すようにコーディングしています。 Private cmdArray(cnt) As System.Windows.Forms.Button Private ary_font(cnt) As System.Drawing.Font Public Property aryFont() As Font() Get For i = 0 To cnt ary_font(i) = Me.cmdArray(i).Font Next Return ary_font End Get Set(ByVal value As Font()) For i = 0 To cnt Me.cmdArray(i).Font = value(i) Next End Set End Property このようにコーディングしたユーザーコントロールをフォームに配置すると、 プロパティが配列なので(?)コレクションエディタというフォームで編集が行えるようになります。 そのエディタ上では、配列の要素は正常に入っていると思うのですが、 FontのNameやSizeなどのプロパティには全て、 "オブジェクトがターゲットの型と一致しません。"と表示されており、設定することができません。 プロパティウィンドウの「+」の部分を展開すると、正常に値が入っています。 [ メッセージ編集済み 編集者: ノブト 編集日時 2006-11-24 15:51 ] [ メッセージ編集済み 編集者: ノブト 編集日時 2006-11-24 15:51 ] | ||||||||||||||||
|
投稿日時: 2006-11-24 21:56
ん。。。なんというか。。。もうちょっと、こう。。。考えようよ。。。
cmdArray(cnt) の、cnt は、どこから出てくるのでしょう? なにも aryFont のゲッターで、ary_font を作成しなくてもいいですよね? cmdArray と ary_font の順序が一致していることは、誰が保証するのですか?あるいは。デザイン時に、1番目のフォントがどのボタンに対応しているか、どうやったらわかるんですか? 属性を使って、デザイン時エディタを指定するんだけど。詳しいことはわからない。 _________________ | ||||||||||||||||
|
投稿日時: 2006-11-26 12:09
説明不足で申し訳ありません。
>cmdArray(cnt) の、cnt は、どこから出てくるのでしょう? >なにも aryFont のゲッターで、ary_font を作成しなくてもいいですよね? >cmdArray と ary_font の順序が一致していることは、誰が保証するのですか?あるいは。デザイン時に、1番目のフォントがどのボタンに対応しているか、どうやったらわかるんですか? コードの一部を抜粋したので必要な情報が欠けてしまいました。 cntは定数で、ボタンの個数です。 フォームの初期化時にボタンをひとつずつcmdArrayにセットしており、for文でary_fontに格納しているので、順序は一致していると思っておりました。 また、ボタンのフォントをひとつずつ変更し、デザインのプロパティウィンドウで表示した時は、順序が合っていたので問題ないと思っておりした。 >属性を使って、デザイン時エディタを指定するんだけど。詳しいことはわからない。 ary_font配列を自分で初期化しても同様の現象となったので、配列に格納されているFontとコレクションエディタで表示するFontの照合順序的なもの(?)がうまくいっていないんじゃないかと思い、上記のやり方も考えたんですが、勉強不足のようで・・・。 もう少し属性の方を調査してみます。 何か情報があればよろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2006-11-26 22:46
うん、それは、宣言に使用しているのでわかるのですが、反対に、宣言を見るから定数だとわかるのです。 変数"だけ"を見て、それが何を表しているのかわかること。理想論ですが。
"配列なので"、順序は保証されると思います。 保証されない場合もあるので、過信は禁物です。
おそらく、標準のコレクション エディタは、文字列に過対応していないと思います。Font から文字列に変換できないのでエラー。 おそらく、型コンバーターを作って、それを指定するか。 または、
宣言は、自信なし。確認してください。 要は、添え字を受け取るプロパティです。 こんな感じで行けるんじゃないかと思う。 _________________ | ||||||||||||||||
|
投稿日時: 2006-11-27 17:44
上記のサンプルのように配列のインデックスを渡して、
そのプロパティを設定するようにしました。 Jitta様、じゃんぬねっと様、 ご教授ありがとうございました。 |
1