3

内部にラベルとカスタム プロパティを持つ「UserControl1」という名前の UserControl があります。

[Browsable(true)]
public new string Text
{
    get { return label1.Text; }
    set { label1.Text = value; }
}

public UserControl1()
{
    InitializeComponent();
}

この UserControl は、「Form1」という名前のフォームで使用されます。デザイナーにプロパティが表示されますが、テキストを書き込んでアプリケーションをビルドすると、テキストがクリアされます。プロパティが Form1.Designer.cs に書き込まれていないことがわかります。

プロパティ名を他の単語に変更すると、すべて問題ありません。基本変数をオーバーライドする「new」キーワードに注意してください。

ここで同様の質問を見つけましたが、解決策はありません。

ご挨拶!

編集: ハードコードされた値はありません:

UserControl1.Designer.cs:

        // label1
        // 
        this.label1.AutoSize = true;
        this.label1.Location = new System.Drawing.Point(64, 63);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(35, 13);
        this.label1.TabIndex = 0;
        // 
        // UserControl1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.Controls.Add(this.label1);
        this.Name = "UserControl1";
        this.Size = new System.Drawing.Size(181, 136);
        this.ResumeLayout(false);
        this.PerformLayout();

Form1.Designer.cx:

        // 
        // userControl11
        // 
        this.userControl11.Location = new System.Drawing.Point(35, 43);
        this.userControl11.Name = "userControl11";
        this.userControl11.Size = new System.Drawing.Size(181, 136);
        this.userControl11.TabIndex = 0;
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(284, 262);
        this.Controls.Add(this.userControl11);
        this.Name = "Form1";
        this.Text = "Form1";
        this.ResumeLayout(false);

問題を再現するには、新しい Windows フォーム アプリケーションを作成し、その中にラベルがあり、"Text" という名前のプロパティを持つユーザー コントロールを作成します。

4

2 に答える 2

6

Text プロパティのoverride代わりに使用してみて、属性を含めます。newDesignerSerializationVisibility

[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override string Text {
  get { return label1.Text; }
  set { label1.Text = value; }
}
于 2013-07-08T16:21:42.047 に答える
1

InitializeComponent() の中を見てください。コントロールをデザイン サーフェイスに配置するときに、既定値をハード コーディングしている可能性があります。

于 2013-07-07T19:26:43.427 に答える