1

これは私のカスタム コントロール クラスです。

// Extended ComboBox where ill change some property.
public class ExtComboBox : ComboBox
{
    ...
}

// ExtButton is a control that i am going to drop on Form from ToolBox.
public partial class ExtButton : Button
{
    public ExtComboBox ComboBoxInsideButton { get; set; }

    public ExtButton()
    {
        InitializeComponent();


        ComboBoxInsideButton = new ExtComboBox();
        ComboBoxInsideButton.Text = "hi!";

        Controls.Add(ComboBoxInsideButton);
    }
}

基本的に、このコントロールをフォームに追加すると、ボタンの上に ComboBox が表示されます。なぜこれが必要なのか聞かないでください:D

ComboBox テキストを変更する必要がある場合は、次を使用します。

extButton1.ComboBoxInsideButton.Text = "aaa";

すべて正常に動作します..しかし:)プロジェクトを再構築または実行した後、デザインモードでいくつかのComboBoxプロパティを変更しようとすると(ウィンドウプロパティ-> ComboBoxInsideButtonを展開->テキストを「bbb」に変更)、ComboBoxプロパティがリセットされます(ExtButton.Designer .cs)

質問 1: サブコントロールをいくつかのデフォルト プロパティ値で初期化する方法。フォームにコントロールをドロップすると、すべての設定が追加されますか?

質問 2: デザイン時にサブコントロールのプロパティを変更する方法。

編集:
ここで答えてください:デザイナーは、サブコントロールのプロパティのコードを生成しません。なんで?
追加[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]すると問題が解決します。

4

1 に答える 1

1

カスタム UserControls の作成方法とそのメンバーへのアクセス方法に関するミニチュートリアルをここに書きまし。ほとんどの場合、変更したいプロパティExtComboBoxを公開するプロパティを に追加する必要があるようです。ComboBox次に、ExtButtonを使用して.、実行時にこれらの値を変更できます。

また、代わりに:

public ExtComboBox ComboBoxInsideButton { get; set; }
...
ComboBoxInsideButton = new ExtComboBox();

行う

public ExtComboBox comboBoxInsideButton = null;
...
comboBoxInsideButton = new ExtComboBox();

privateともの違いを理解しておいてくださいpublic。別のコントロールに配置している場合、ExtComboBoxそれを望んでいるかどうかわかりません。public

お役に立てれば。

于 2012-08-29T16:46:04.970 に答える