ラベル、2つのボタン、およびDataGridViewで構成される複合UserControl(「ListTable」と呼ばれる)があるとします。ラベルはDataGridViewのタイトルであり、2つのボタンは[行の追加]と[行の削除]で、基本的でわかりやすい機能を備えています。
DesignerでDataGridViewの列を公開して、DataGridView自体を編集する場合とまったく同じ方法でUserControlを介してDataGridViewの列を編集できるようにするにはどうすればよいですか?
私が試したこと:
次のようなさまざまな属性値を使用して、「List」形式の「TableColumns」というタイトルのプロパティを介してListTableでDataGridViewのColumnsプロパティをラップするさまざまな組み合わせ。
[DesignerSerializationVisibility (DesignerSerializationVisibility.Content)]
[Editor(typeof(TableColumnEditor),
typeof(System.Drawing.Design.UITypeEditor))]
public List<DataGridViewColumn> TableColumns
{
get
{
List<DataGridViewColumn> columns = new List<DataGridViewColumn>();
foreach (DataGridViewColumn col in table.Columns)
{
columns.Add(col);
}
return columns;
}
set
{
this.table.Columns.Clear();
foreach (DataGridViewColumn col in value)
{
this.table.Columns.Add(col);
}
}
}
TableColumnEditorは次のとおりです。
class TableColumnEditor : CollectionEditor
{
public TableColumnEditor(Type type) : base(type) { }
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
{
object result = base.EditValue(context, provider, value);
((ListTable)context.Instance).TableColumns = (List<DataGridViewColumn>)result;
return result;
}
}
これはどれもうまくいかないようです。これのほとんどは、私が完全には理解していない単なる祈りのパッチワークです。
したがって、古典的なジレンマ:私は座ってこれらの内部について学ぶ必要がありますが、MSDNのより難解なWinFormsの記事を、集中力のない、のんびりと踏みにじる(仕事の)時間はありません。上記のコードは回収可能ですか?正しい方向ですか?