- - PR -
ユーザーコントロールの中身をデザイン時に変更したい
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-18 15:36
これはわかるのですが
という前提で
これが必須なのかどうかがまずわかりません。 単に「ラベルがあるとすると」という例なのか、何らかの形でフォームの定義と結びつける必要があるのか否かがよくわかっていません。 ユーザーコントロール内で定義したコントロールについてはクラス内で参照できるようなのに敢えてprivateで定義しているので何らかの意味があるのだと思うのですがその意味がわからず迷っています。 それと、一番わからないのは
の部分で、なぜこれがピンポイントでlabel1のプロパティということになるのかまったくわかりません。 もしかするとこの書き方はユーザーコントロールのText型のプロパティの定義ということになるのでしょうか? 試しにC#のプロジェクトを作成し、ユーザーコントロールのコードを作って見たのですが 1.label1が重複しているというエラーになる(コメントアウトしました) 2.フォームに貼り付けたユーザーコントロールのプロパティにそれらしい項目を見つけることができませんでした。
そもそも、今回頂いている回答の前提条件を理解していないような気がしています。 申し訳ありませんが抜けていそうな部分をご指摘頂けないでしょうか。 | ||||||||||||||||||||
|
投稿日時: 2009-02-18 15:54
教えて頂いたページでは、ラベルに置き換えた場合、実行時にプロパティを通してラベルを書き換える方法しか説明されていないように思えます。 この方法であれば敢えてプロパティを作らなくてもラベルのModifiersをPublicにすることで実現できます。(今はModifiersをPublicにして実現しています) やりたいのはToshiさんのご指摘
の方法なのでもしご存知でしたらご紹介いただけないでしょうか。 | ||||||||||||||||||||
|
投稿日時: 2009-02-18 17:34
いえ、概念としては同じです。 図11と「IdeaCardコントロールのCategoryTextプロパティを定義する」を 参考にして動作を確認してみてください。
デザイナで修正できるのは、あくまで「プロパティ」です。 ですから、敢えてプロパティをつくります。 尚、先のサンプルで
の確認をしたとありますが、 2のそれらしい項目とはどのような項目が存在することを望んでいますか? 先のサンプルではUserControlにTextという名称でプロパティが公開されており、 その値を変更することで、Labelの表示が切り替わるはずです。 | ||||||||||||||||||||
|
投稿日時: 2009-02-18 17:58
> ひとつのフォームに同じユーザーコントロールを複数貼り付け、各々ラベルを変更したいのですが、各々のラベルをデザイン時に変更することは可能でしょうか?
↓ ラベルの Text をユーザーコントロールのプロパティとして公開すれば出来ます。 ↓ > 教えて頂いたページでは、ラベルに置き換えた場合、実行時にプロパティを通してラベルを書き換える方法しか説明されていないように思えます。 ↓ その方法で良いんじゃないの? | ||||||||||||||||||||
|
投稿日時: 2009-02-18 18:00
プロパティの簡単(本当に初歩的な使い方だと思いますが)な使い方は一応わかっているつもりです。 ですので、図11と「IdeaCardコントロールのCategoryTextプロパティを定義する」については一応理解できてるつもりです。 しかしデザイナーでプロパティを変更するやり方がわからず、実行時に値を書き換えるというやり方をしているため、ModifiersをPublicにして実行時に値を書き換えることと、プロパティを定義して実行時に値を書き換えることは(実行時に書き換える点で)同じ結果になると書かせて頂きました。 このことは秀和システムのVisualBasic2008逆引き大全にも書かれています。 しかしデザイナーで変更することができればまったく状況が異なってきますので、Toshiさんの言われているようにプロパティでなければならないということに異論を挟むつもりは毛頭ありません。
私の場合はTextというプロパティを作ったので、デザイナーのプロパティウインドウにTextというプロパティが追加されるのかなと思ったのですが見つけられませんでした。 | ||||||||||||||||||||
|
投稿日時: 2009-02-18 18:07
もしかしてピントはずれな質問をしているのでしょうか? 私が期待しているのは、例えばフォームにラベルを配置した時、プロパティウインドウでTextプロパティを書き換えるようにユーザーコントロールに追加したプロパティを書き換えることなのですが・・・ Toshiさんの回答はそれができると教えて頂いていると思っていますが勘違いでしょうか? | ||||||||||||||||||||
|
投稿日時: 2009-02-18 18:26
もしかして私が読み違えてる?
> フォームにラベルを配置した時、プロパティウインドウでTextプロパティを書き換えるように > ユーザーコントロールに追加したプロパティを書き換えることなのですが・・・ 1.ユーザーコントロールに自分でプロパティを作成する。( LabelText とか自由な名前で) 2.その LabelText プロパティとユーザーコントロール内のラベルの Text プロパティを関連付ける。 3.デザイナでユーザーコントロールの LabelText プロパティを設定すると ユーザーコントロール内のラベルの Text プロパティも設定される。
今、書いて思いましたが BrowsableAttribute がわからなかったって話でしょうか? http://msdn.microsoft.com/ja-jp/library/system.componentmodel.browsableattribute(VS.80).aspx | ||||||||||||||||||||
|
投稿日時: 2009-02-18 18:45
方法については、Kingさんがかかれてますが、以下念のため。
この部分はデザイナ上でLabelを貼り付ければVSが自動生成するはずです。 なので、Labelをデザイナで貼り付けたあとに、
と、プロパティを追加してみてください。
初期 true じゃありませんでしたっけ? UserControlとFormは同じプロジェクトなら、ビルドしてなくて表示されないと いうことは考えられるんですけどね・・・ ※でも警告がでたはずですね・・ [ メッセージ編集済み 編集者: Toshi 編集日時 2009-02-18 18:45 ] |