DatagridviewCell.Datagridview
プロパティは読み取り専用です。行と列のようなDatagridview
参照を持つ他のdatagridview要素にも同じことが適用されます。しかし、何らかの形でDataGridViewから要素を追加/削除すると、このプロパティは背後で正しく設定されるため、親のDataGridViewの要素への参照と矛盾はありません。DataGridViewCell.Datagridviewプロパティはどのように設定されますか?
これはどのようにして達成されますか?私は似たようなことをやろうとしています。私が知っている唯一の "トリック"は、コレクション定義をクラス定義の中に入れたり、その逆にすることで、要素やコレクションが他のプライベートフィールドにアクセスできるようにしますが、datagridviewの名前空間を見ると、 。
論理的に聞こえますが、少し奇妙です。親dgvと子要素の参照を互いに同期させておく必要があるため、Formsアセンブリ内で_anything_要素のdgvプロパティを変更できるようにすることはかなり広い範囲です。私はMSが明らかにアセンブリ全体をコントロールしているので、それは問題ないと思うが、追加のチェックが適切かどうか疑問に思う。 – Tekito
これは本当に奇妙なことではありません。外部の開発者が見ることのできない素晴らしい制限されていないアクセスと引き換えに、開発者に同期化の負担をかけるだけです。ところで、このようなプロパティを定義している場合、public string Text {get;セット; }のように、 "set"をinternalにすることができます:public string Text {get;内部セット;} 「Under the hood」に行き、マイクロソフトがDataGridView用に作成したコードを参照するには、Red-GateのReflectorを使用できます。 www.reflector.net – RichardB
開発者(および将来の開発者)が同期のルールを覚えている限り。しかし、おそらく、私のような最も良い解決策は、コレクションの定義の中で定義された抽象的な子クラスで、起動時にプライベート '_parentColl'フィールドの変更を可能にするデリゲート参照を渡します。この方法では、コレクション内の1つのデリゲートを除いて、子コレクションの参照はすべて非表示のままです。コレクションの参照は、子の追加/削除時に同期に使用されます。おそらく、おそらくあまりにも複雑です。 – Tekito