- PR -

ユーザーコントロールの中身をデザイン時に変更したい

投稿者投稿内容
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-02-18 18:47
試しに UserControl を継承して、そこに Text プロパティを作ってみましたが、
↓と同じ状況にハマりました。
http://vsug.jp/tabid/63/forumid/51/postid/4712/view/topic/Default.aspx

たぶん UserControl.Text プロパティと被っているせいだと思います。プロパティ名を Title とか別のに変えるとうまくいきましたし。
Text プロパティでもうまくいく方法があるかもしれませんが、私には分かりませんでした。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2009-02-18 18:55
引用:

Toshiさんの回答はそれができると教えて頂いていると思っていますが勘違いでしょうか?


「動作を確認してみてください」の発言は無視ですか?

引用:

1.ユーザーコントロールに自分でプロパティを作成する。( LabelText とか自由な名前で)


ただし、既存のプロパティとダブってはいけない。
IdeaTextでもLabelTextでもいいが、Textは拙い。
未記入
常連さん
会議室デビュー日: 2008/10/21
投稿数: 20
投稿日時: 2009-02-18 19:00
引用:

Kingさんの書き込み (2009-02-18 18:26) より:

今、書いて思いましたが BrowsableAttribute がわからなかったって話でしょうか?
http://msdn.microsoft.com/ja-jp/library/system.componentmodel.browsableattribute(VS.80).aspx



はい、その通りでした。
BrowsableAttributeを知らなかったために皆さんの回答が意味不明でした。

コード:
Imports System.ComponentModel

Public Class UserControl1
    <Browsable(True)> _
        Public Property Text1() As String
        Get
            Return Label1.Text
        End Get
        Set(ByVal value As String)
            Label1.Text = value
        End Set
    End Property
End Class



というコードを書くことでデザイナーのプロパティにText1というプロパティが現れました。
ありがとうございました。

未記入
常連さん
会議室デビュー日: 2008/10/21
投稿数: 20
投稿日時: 2009-02-18 19:03
[quote]
todoさんの書き込み (2009-02-18 18:55) より:
「動作を確認してみてください」の発言は無視ですか?

[quote]


もし私に対してのコメントでしたら一切無視はしていないつもりです。
わかる範囲で教えていただいたコードなどは試しています。
記述が足りないために誤解があるようでしたらご容赦下さい
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2009-02-18 19:17
引用:

試しに UserControl を継承して、そこに Text プロパティを作ってみましたが、
↓と同じ状況にハマりました。
http://vsug.jp/tabid/63/forumid/51/postid/4712/view/topic/Default.aspx

たぶん UserControl.Text プロパティと被っているせいだと思います。プロパティ名を Title とか別のに変えるとうまくいきましたし。
Text プロパティでもうまくいく方法があるかもしれませんが、私には分かりませんでした。


あ、なるほど・・・
UserControlだからですね・・・

UserControlのTextプロパティには以下の属性が定義されているので、
デザイナでの表示およびInitializeComponentへのコード自動生成がされないようです。
コード:

/// UserControlクラスの実装
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Text



なので、以下のようにすれば一応Textプロパティでもいけます。
コード:

[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override string Text



To 未記入さん
プロパティ名Textで確認してませんでした。
時間をとらせてしまい、すいませんでした。

[ メッセージ編集済み 編集者: Toshi 編集日時 2009-02-18 19:18 ]
未記入
常連さん
会議室デビュー日: 2008/10/21
投稿数: 20
投稿日時: 2009-02-18 19:33
引用:

Toshiさんの書き込み (2009-02-18 19:17) より:
To 未記入さん
プロパティ名Textで確認してませんでした。
時間をとらせてしまい、すいませんでした。




いえいえ、こちらこそ皆さんにご協力頂いて感謝しています。
皆さん、ありがとうございました

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