VS Designer で半分、コードで半分を作成した UserControl があります。コードからこの UserControl の新しいインスタンスを作成したいのですが、そのデフォルト プロパティの一部を毎回異なる値に設定します。
例 (w 実際のコードを編集):
// in my Main Form..
var newFrame = new RPictureFrame(); // my UserControl
newFrame.Width = 50;
newFrame.Height = 50;
newFrame.Location = new Point(0,0);
this.Controls.Add(newFrame);
newFrame = new RPictureFrame();
newFrame.Width = 200;
newFrame.Height = 400;
newFrame.Location = new Point(0,150);
this.Controls.Add(newFrame);
元の間違った例:
var newMyUserControl1 = new MyUserControl();
newMyUserControl1.size.Width = 50;
var newMyUserControl2 = new MyUserControl();
newMyUserControl2.size.Width = 200;
ただし、コントロールの新しいインスタンスを作成した直後に私が設定した新しい値が無視されるように見えることがあります。
私の唯一の説明は、私の UserControl は Designer で設計されているため、実際にはすべてのデフォルト プロパティが .resx ファイル (?) でシリアル化されたままになっているということです。実行時に新しいインスタンスを作成すると、逆シリアル化が別のスレッドで開始されます (制御できません)。逆シリアル化される前にいくつかのプロパティを誤って設定すると、直後に値が ser'd 値によって上書きされます。デザイナーが作成したコントロールの作成がどのように機能するかについての情報は見つかりませんでしたので、これはもちろん私の推測です。
私の質問は、それを回避する方法ですか?おそらくいくつかの簡単な方法。
私が試したこと:
1-私のUserControlコードで:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Size size;
..デザイン時のシリアル化から標準プロパティを削除します。しかし(コンパイラは言う)私は既存の標準プロパティを隠しているだけです。さらに、もちろん機能しません。私はまだ c# と .NET の初心者なので、やり方が間違っているのでしょうか?
2- 新しい各コントロールの (on)Load イベントをサブスクライブし、完全に逆シリアル化してから、必要なものを設定できると思います。しかし、コードでは非常に面倒に思えます.プロパティは不必要に2回(またはそれ以上)設定されます.基本的に、よりエレガントなソリューションはないと思います:)
アドバイスをいただければ幸いです