DataGridViewを含む複合ユーザーコントロールがあります。さらに、DataGridView.Modifiers
プロパティはに設定されPublic
ます。
ユーザーコントロールをデザイナにドロップするときに、この内部DataGridViewのプロパティを[プロパティ]ウィンドウに表示したいと思います。
私は何をすべきか?どうもありがとう。
内部のDataGridVIewには、アクセス可能な複合コントロールで定義されたインスタンスとパブリックプロパティが必要です。
このようなもの:
// your grid control instantiated somewhere:
DataGridVIew myInnerDataGridVIew = new ...
public DataGridVIew MyInnerDataGridVIew
{
get { return myInnerDataGridVIew; }
set { myInnerDataGridVIew = value; }
}
このプロパティを作成して再構築すると、デザイナーで複合コントロールが選択されたときに、プロパティウィンドウにMyInnerDataGridVIewメンバーが表示され、その横に[+]が表示されます。プラス記号をクリックすると、DataGridVIewのプロパティが展開されているはずです。
他の2つの答えも正しいですが、より一般的な方法は、内側のグリッドのインスタンスの参照への読み取り専用アクセスを許可することだと私は主張します.
public DataGridView DataGrid { get { return this.dataGridView1; } }
このようにして、コントロールのユーザーはすべてのグリッド プロパティにアクセスし、選択したデフォルト (背景色など) をオーバーライドできますが、グリッドを新しいインスタンスに置き換えることはできず、内部ロジックが台無しになる可能性があります。あなたのコントロールの。
あなたがする必要があるのは、パブリックプロパティを追加して、そのコントロールをドラッグしたコンテナがそれをプロパティとして見るようにすることです。
簡単に言うと、dataGrid1という名前の静的データグリッドが1つあると仮定します。次に、外部からアクセスできるようにする(そしてプロパティボックスに表示する)には、プロパティを設定して返すプロパティを作成する必要があります。
public DataGridView ChildDataGridView
{
get { return this.dataGrid1; }
set { this.dataGrid1 = value; }
}
これにより、外部から変更できるようになります。これで、コントロールをデザイナーに追加すると、ユーザーコントロールを選択すると、ChildDataGridViewという新しいプロパティが表示されます。
そのプロパティから変更してアクセスできます。
これは、dataGrid1が常に存在し、コードで動的に生成されない場合にのみ機能します。