2

Rowsプロパティを持つカスタムコントロールについて考えてみます。

private EMRow[] _rows;

public CustControl()
{
    InitializeComponent();
}

public EMRow[] Rows
{
    get
    {
        return _rows;
    }
    set
    {
        _rows = value;
    }
}

各EMRowはTextBoxを作成し、2つのプロパティを公開します。1つはテキスト用で、もう1つはコントロール自体用です。

private TextBox _txtValue;

public EMRow()
{
    if (_txtValue == null)
        _txtValue = new TextBox();
}

public string Value
{
    get
    {
        return _txtValue.Text;
    }
    set
    {
        _txtValue.Text = value;
    }
}

public TextBox ValueTextBox
{
    get
    {
        return _txtValue;
    }
    set
    {
        _txtValue = value;
    }
}

このカスタムコントロールをフォームにドロップしてValueプロパティを変更すると、designer.csファイルへの変更が更新されて安全になります。

ValueTextBoxプロパティ(コードではなく、Visual Studio Designerですべて)にドリルダウンしてプロパティを変更すると、変更はdesigner.csファイルに保存されません。デザイナに関する限り、このプロパティを作成して参照するTextBoxオブジェクトすらありません。

これは「期待どおり」の動作であると確信していますが、その理由については困惑しています。ここでVSデザイナーの基本が欠けていますか?

4

1 に答える 1

1

少し掘り下げた後、この問題の解決策を見つけました。DesignerSerializationVisibility属性を追加して、このオブジェクト自体をシリアル化するようにデザイナーに指示します。

private TextBox _txtValue;

public EMRow()
{
    if (_txtValue == null)
        _txtValue = new TextBox();
}

public string Value
{
    get
    {
        return _txtValue.Text;
    }
    set
    {
        _txtValue.Text = value;
    }
}

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public TextBox ValueTextBox
{
    get
    {
        return _txtValue;
    }
    set
    {
        _txtValue = value;
    }
}    

Winforms Designer:サブオブジェクトのプロパティを変更(および保持)します 。ありがとうHans!

于 2012-11-15T13:55:05.110 に答える