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デザイナーの基本が欠けていますか?