1

ラベル、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の記事を、集中力のない、のんびりと踏みにじる(仕事の)時間はありません。上記のコードは回収可能ですか?正しい方向ですか?

4

1 に答える 1