C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.67953 の関連記事表示

<< 0 >>
■67953  ユーザーコントロールのプロパティ値が元に戻る現象について。
□投稿者/ 会社員 -(2013/09/11(Wed) 16:38:26)

    分類:[.NET 全般] 

    お世話になります。質問させて下さい。

    VS2012 .NET Framework4.5での開発です。

    デザイン画面で、フォームに貼付たユーザーコントロールの
    プロパティ値を設定してビルドすると値が元に戻ってしまいます。

    プロパティの型は独自クラスなので、独自クラス側はExpandableObjectConverter属性
    を設定してデザイン時でも値が変更出来るようにしてあるのですが、
    その独自クラスのプロパティ値をデザン画面上で変更しても、ビルドして
    再び値を見ると以前の値に戻ってしまいます。

    どうやったらデザイン時の設定を反映(保存)出来るのでしょうか?

    どなたか教えて頂けないでしょうか?
    よろしくお願い致します。m(_ _)m


    以下はユーザーコントロール側のコードです。
    <pre>

    Public Class UserControl1
    Private m_clsUserClass As New clsUserClass
    Public ReadOnly Property UserClass() As clsUserClass
    Get
    Return m_clsUserClass
    End Get
    End Property
    End Class

    <System.ComponentModel.TypeConverter(GetType(System.ComponentModel.ExpandableObjectConverter))> _
    Public Class clsUserClass
    '★★★★この値がビルドすると初期値に戻る。。
    Private m_strText As String

    <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)> _
    Public Property Text() As String
    Get
    Return m_strText
    End Get
    Set(value As String)
    m_strText = value
    End Set
    End Property
    End Class


    </pre>
親記事 /過去ログ115より / 関連記事表示
削除チェック/

■67956  Re[1]: ユーザーコントロールのプロパティ値が元に戻る現象について。
□投稿者/ 魔界の仮面弁士 -(2013/09/11(Wed) 17:14:29)
    2013/09/11(Wed) 17:16:52 編集(投稿者)

    # おぉう…ちょっと遅かったみたい。
    # 解決済みにチェックされていなかったから、まぁいいか。(^^;


    No67953 (会社員 さん) に返信
    > '★★★★この値がビルドすると初期値に戻る。。


    DesignerSerializationVisibility(Content) の指定位置が間違っています。
    とりあえず、こんな感じですかね。


    Public Class UserControl1
      Private m_clsUserClass As New clsUserClass

      <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)> _
      Public ReadOnly Property UserClass() As clsUserClass
        Get
          Return m_clsUserClass
        End Get
      End Property
    End Class

    <System.ComponentModel.TypeConverter(GetType(System.ComponentModel.ExpandableObjectConverter))> _
    Public Class clsUserClass
      Private m_strText As String = "InitialValue"

      <System.ComponentModel.DefaultValue("DefaultValue")> _
      Public Property Text() As String
        Set(value As String)
          m_strText = value
        End Set
        Get
          Return m_strText
        End Get
      End Property
    End Class


    なお上記では、初期値と既定値の設定も加えています。
    (元のコードのままだと Nothing が使われます)

    初期値と既定値は同じ値にすることが多いのですが、今回は実験も兼ねて、
    あえて違う値にしています。UserControl1 貼り付け後、Text プロパティを
    編集せずに実行した時の値がどのようになるか確認してみてください。


    ちなみに、DefaultValueAttribute では表現できないような値の場合には、
    「"Resetプロパティ名" メソッド」と「"ShouldSerializeプロパティ名" メソッド」を
    提供することになります。
記事No.67953 のレス /過去ログ115より / 関連記事表示
削除チェック/

■67954  Re[1]: ユーザーコントロールのプロパティ値が元に戻る現象について。
□投稿者/ Hongliang -(2013/09/11(Wed) 17:02:20)
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
    Public ReadOnly Property UserClass() As clsUserClass
    とした上で、
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    Public Property Text() As String
    とすればどうでしょうか?
記事No.67953 のレス /過去ログ115より / 関連記事表示
削除チェック/

■67955  Re[2]: ユーザーコントロールのプロパティ値が元に戻る現象について。
□投稿者/ 会社員 -(2013/09/11(Wed) 17:10:38)
    Hongliang 様、早速の返信ありがとうです!

    ご教示して頂いた方法で出来ました!!!!
    大変助かりました、・・もうちょっと属性の仕組みを勉強させて頂きます。(´Д⊂ヽ

    本当にありがとうございました!m(_ _)m
記事No.67953 のレス /過去ログ115より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -