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

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

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

No.45834 の関連記事表示

<< 0 >>
■45834  PropertyGridのReadOnly属性変更
□投稿者/ TKO -(2010/01/20(Wed) 18:43:12)

    分類:[VB.NET/VB2005 以降] 

     VB2005にて、メインフォームにあるチェックボックスの状態により、
    PropertyGridのReadOnly属性を変更したいのですが、うまくいきません。

     調べてみると、PropertyGridのReadOnly属性変更は、コードから
    setアクセサを用いてプロパティを編集することは可能である。とありました。

     PropertyGridのReadOnly属性変更を変更するには、どの様な記述が
    必要なのでしょうか?

    --- 以下、実現させたいコードの概要 -------------------------------------------
    If CheckBox1.Checked = True Then
    ZZZ.ReadOnlyAttribute = True '左記のコードは空想です。
    else
    ZZZ.ReadOnlyAttribute = False '左記のコードは空想です。
    End If
    --- 以下、クラスの抜粋 -------------------------------------------------------
    Public Class ZZZ
    Public _AAA_Enum As String = "AAA"
    <ReadOnlyAttribute(False), _
    Category("AAA")> _
    <Description("AAA")> _
    Public Property AAA() As String
    Get
    Return _AAA
    End Get
    Set(ByVal Value As String)
    _AAA = Value
    End Set
    End Property
    End Class 
親記事 /過去ログ77より / 関連記事表示
削除チェック/

■45839  Re[1]: PropertyGridのReadOnly属性変更
□投稿者/ Jitta on the way -(2010/01/20(Wed) 19:11:34)
    No45834 (TKO さん) に返信
    >  VB2005にて、メインフォームにあるチェックボックスの状態により、
    > PropertyGridのReadOnly属性を変更したいのですが、うまくいきません。
    >
    >  調べてみると、PropertyGridのReadOnly属性変更は、コードから
    > setアクセサを用いてプロパティを編集することは可能である。とありました。
    >
    >  PropertyGridのReadOnly属性変更を変更するには、どの様な記述が
    > 必要なのでしょうか?

    これは、既存のコントロールについての話でしょうか?

    また、デザイン時に切り替えたいということでしょうか?
記事No.45834 のレス /過去ログ77より / 関連記事表示
削除チェック/

■45843  Re[2]: PropertyGridのReadOnly属性変更
□投稿者/ TKO -(2010/01/20(Wed) 19:27:04)
    No45839 (Jitta on the way さん) に返信
    > ■No45834 (TKO さん) に返信
    >> VB2005にて、メインフォームにあるチェックボックスの状態により、
    >>PropertyGridのReadOnly属性を変更したいのですが、うまくいきません。
    >>
    >> 調べてみると、PropertyGridのReadOnly属性変更は、コードから
    >>setアクセサを用いてプロパティを編集することは可能である。とありました。
    >>
    >> PropertyGridのReadOnly属性変更を変更するには、どの様な記述が
    >>必要なのでしょうか?
    >
    > これは、既存のコントロールについての話でしょうか?
    >
    > また、デザイン時に切り替えたいということでしょうか?

    メインフォームのコード内で、クラス中に設定した
    ・・・
    <ReadOnlyAttribute(False), _
    ・・・
    この部分を変更し、表示の切り替えを行いたいのですが、
    うまく実現できません。


記事No.45834 のレス /過去ログ77より / 関連記事表示
削除チェック/

■45853  Re[3]: PropertyGridのReadOnly属性変更
□投稿者/ Jitta on the way -(2010/01/21(Thu) 07:35:44)
    No45843 (TKO さん) に返信
    >>これは、既存のコントロールについての話でしょうか?
    >>
    >>また、デザイン時に切り替えたいということでしょうか?
    >
    > メインフォームのコード内で、クラス中に設定した
    > ・・・
    > <ReadOnlyAttribute(False), _
    > ・・・
    > この部分を変更し、表示の切り替えを行いたいのですが、
    > うまく実現できません。
    >
    >
    >

    問い合わせの回答になってないんですけど。

    いつ、どこで、どうやって、値を書き換えた結果を見たいのでしょうか。
    つか、クラスのメンバーに付ける属性は、変更不能なはず。少なくとも、クラス インスタンスにくっつくものではありません。
記事No.45834 のレス /過去ログ77より / 関連記事表示
削除チェック/

■45847  Re[1]: PropertyGridのReadOnly属性変更
□投稿者/ 魔界の仮面弁士 -(2010/01/20(Wed) 20:35:59)
    No45834 (TKO さん) に返信
    >  VB2005にて、メインフォームにあるチェックボックスの状態により、
    > PropertyGridのReadOnly属性を変更したいのですが、うまくいきません。
    ReadOnly 属性を割り当てたのは、PropertyGrid ではなく、
    ZZZ クラスの AAA プロパティなのではありませんか?
    
    
    >  調べてみると、PropertyGridのReadOnly属性変更は、コードから
    > setアクセサを用いてプロパティを編集することは可能である。とありました。
    それって、下記の事でしょうか?
    http://www.atmarkit.co.jp/fdotnet/dotnettips/316pgridattrib/pgridattrib.html
    
    》ReadOnly属性(Boolean値)
    》プロパティの「読み取り専用」を指定する。この属性をTrueに指定されたプロパティは、
    》PropertyGridコントロールで編集することができなくなる。ただし、この属性により
    》読み取り専用に指定されても、コードからsetアクセサを用いてプロパティを
    》編集することは可能である 
    
    だとしたそれは、
     obj = New ZZZ()
      obj.AAA = "新しい値"
    のように、「ReadOnly属性が付いていても、コードから値をセットできる」事を
    示しているのであって、ReadOnlyAttribute の値を編集するという意味ではありません。
記事No.45834 のレス /過去ログ77より / 関連記事表示
削除チェック/

■45848  Re[2]: PropertyGridのReadOnly属性変更
□投稿者/ Hongliang -(2010/01/20(Wed) 21:15:12)
    多少面倒で、いくらか型記述に関する知識が必要ですよ。
    具体的には以下のような実装手順になります。

    変更したいプロパティ(上記例の AAA)を持っているクラス(上記例の ZZZ)に TypeConverter 属性を付ける。
    ZZZ には Browsable(False) なプロパティ AAAReadOnly を用意。

    TypeConverter から派生したクラス(仮に ZZZConverter とする)を作成する。ZZZ の TypeConverter 属性の引数にはこの ZZZConverter を指定する。
    GetPropertiesSupported をオーバーライドし、True を返させる。
    GetProperties をオーバーライドし、適切な PropertyDescriptorCollection を返す(後述)。

    PropertyDescriptor から派生したクラス(仮に AAAPropertyDescriptor とする)を作成する。直接派生するのは面倒なので、ZZZConverter のネストクラスとして SimplePropertyDescriptor から派生するのが便利。
    AAAPropertyDescriptor のコンストラクタの引数に ZZZ を用意し、渡された ZZZ をフィールドに保存しておく。
    GetValue と SetValue をオーバーライドし、適切な処理を実装する(引数 component を ZZZ にキャストし、GetValue ならその AAA を返し、SetValue ならその AAA に value を AAA の型にキャストして代入する)。
    IsReadOnly をオーバーライドし、フィールドの ZZZ の AAAReadOnly を返す。


    さて、GetProperties ですが、次のような実装でいいでしょう。

    TypeDescriptor.GetProperties(Object, Attribute(), Boolean) を使ってカスタムされていないオリジナルの PropertyDescriptorCollection を取得する。
    この PropertyDescriptorCollection と同数の PropertyDescriptor 配列を作成する。
    For ループで、PropertyDescriptorCollection の中身をそれぞれ PropertyDescriptor 配列に移す。
    ただし、Name が AAA の PropertyDescriptor のみ、AAAPropertyDescriptor を代わりに PropertyDescriptor 配列に格納する。
    PropertyDescriptor 配列から PropertyDescriptorCollection を作成して返す。


    あとは、PropertyGrid の SelectedObject に渡した ZZZ インスタンスの AAAReadOnly を変更した上で PropertyGrid の Refresh を呼び出せば、読み取り専用かどうかが切り替わるようになります。
記事No.45834 のレス /過去ログ77より / 関連記事表示
削除チェック/

■45951  Re[3]: PropertyGridのReadOnly属性変更
□投稿者/ TKO -(2010/01/22(Fri) 09:51:58)

     返信送れましたが、Jitta on the way様、魔界の仮面弁士様、Hongliang様、有り難う御座います。
    また、うまく質問/回答が出来ず申し訳ありませんでした。

     皆様から、教えて頂きました事を基に色々と調べてみましたが、単純には実現出来そうにない
    というのは判りました。(私には・・・)
     また、実現出来るかどうかまで具体化出来ていないのが実情ですが、とりあえず、「解決済み」
    ということにさせて頂きます。

     本当に、ありがとうございました。



記事No.45834 のレス / END /過去ログ77より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -