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

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

C# と VB.NET の入門サイト

Re[2]: ユーザーコントロールのプロパティ値が元に戻る現象について。


(過去ログ 115 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■67953 / inTopicNo.1)  ユーザーコントロールのプロパティ値が元に戻る現象について。
  
□投稿者/ 会社員 (1回)-(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>

引用返信 編集キー/
■67954 / inTopicNo.2)  Re[1]: ユーザーコントロールのプロパティ値が元に戻る現象について。
□投稿者/ Hongliang (100回)-(2013/09/11(Wed) 17:02:20)
<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
Public ReadOnly Property UserClass() As clsUserClass
とした上で、
<DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
Public Property Text() As String
とすればどうでしょうか?

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

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

本当にありがとうございました!m(_ _)m

引用返信 編集キー/
■67956 / inTopicNo.4)  Re[1]: ユーザーコントロールのプロパティ値が元に戻る現象について。
□投稿者/ 魔界の仮面弁士 (335回)-(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プロパティ名" メソッド」を
提供することになります。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -