0

動的フォームを構築している状況があり、ボタンをクリックするといくつかの新しいコントロールを生成する必要があります。ただし、コントロールの各セットには、そのセット内のコントロールのみが表示され、他のコントロールは表示されないことが重要です。そのため、コントロールを保持する別のクラスを作成しようとしましたが、クリックするたびにこのクラスの新しいインスタンスを作成したいと考えています。

私の問題は、それらをフォームに表示する方法ですか?

コントロールを保持するクラスは次のとおりです。

public class CrmCustomerSearchRow 
{
    public SimpleButton Remove = new SimpleButton();
    public LookUpEdit AttributeList = new LookUpEdit();
    public LookUpEdit ConditionalList = new LookUpEdit();
    public LookUpEdit EnumerableOptions = new LookUpEdit();
    public TextEdit NumericEntry = new TextEdit();
    private readonly StyleController _style = new StyleController();
    private CustomerSearchController _controller = new CustomerSearchController();

    public CrmCustomerSearchRow(int rowX, int rowY, CustomerSearchController control) : this(rowX, rowY, control, false){}

    public CrmCustomerSearchRow(int rowX, int rowY, CustomerSearchController control, bool firstGo)
    {
        //Initializers
        _controller = control;
        Remove = new SimpleButton()
            {
                Enabled = !firstGo,
                Image = Properties.Resources._001_02,
                Location = new System.Drawing.Point(rowX, rowY),
                Name = "simpleButtonRemove",
                Size = new System.Drawing.Size(34, 30),
                StyleController = _style
            };
        AttributeList = new LookUpEdit()
            {
                Location = new System.Drawing.Point(Remove.Location.X + Remove.Width + 4, rowY),
                Name = "lookUpEditAttributeList",
                Size = new System.Drawing.Size(102, 20),
                StyleController = _style
            };
        AttributeList.Properties.Buttons.AddRange(new[]
            {
                new DevExpress.XtraEditors.Controls.EditorButton(
                                                      DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)
            });
        ConditionalList = new LookUpEdit()
            {

                Location = new System.Drawing.Point(AttributeList.Location.X + AttributeList.Width + 4, rowY),
                Name = "lookUpEditConditionalList",
                Size = new System.Drawing.Size(50, 20),
                StyleController = _style
            };
        ConditionalList.Properties.Buttons.AddRange(new[]
            {
                new DevExpress.XtraEditors.Controls.EditorButton(
                                                        DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)
            });
        EnumerableOptions = new LookUpEdit()
            {
                Location = new System.Drawing.Point(ConditionalList.Location.X + ConditionalList.Width + 4, rowY),
                Enabled = false,
                Name = "lookUpEditEnumerableOptions",
                Size = new System.Drawing.Size(91, 20)
            };
        ConditionalList.Properties.Buttons.AddRange(new[]
            {
                new DevExpress.XtraEditors.Controls.EditorButton(
                                                        DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)
            });
        //Datastuffs
        AttributeList.Properties.DataSource = _controller.PropertyTypes;
        AttributeList.Properties.ValueMember = "AttributeTypeGuid";
        AttributeList.Properties.DisplayMember = "AttributeTypeName";
        //Event Handlers
        Remove.Click += Remove_Click;
        AttributeList.EditValueChanged += AttributeList_EditValueChanged;
        //Default Visibility and Enabledness
        ConditionalList.Enabled = false;
        EnumerableOptions.Visible = false;
        NumericEntry.Visible = false;
    }

そして、それらをフォームに追加しようとする試みは次のとおりです。

        private void simpleButtonAddTemplate_Click(object sender, EventArgs e)
    {
        var oldX = int.Parse(simpleButtonAddTemplate.Location.X.ToString(CultureInfo.InvariantCulture));
        var oldY = int.Parse(simpleButtonAddTemplate.Location.Y.ToString(CultureInfo.InvariantCulture));
        var newX = oldX + int.Parse(simpleButtonAddTemplate.Size.Height.ToString(CultureInfo.InvariantCulture)) + 4;
        var newY = oldY;
        Rows.Add(
            new CrmCustomerSearchRow(oldX, oldY, _controller));
        simpleButtonAddTemplate.Location = new Point(newX, newY);

    }
4

1 に答える 1

2

あなたが探しているのは、UserControl. これは、多数の他のコントロールで構成され、独自の複合機能を持つユーザー定義コントロールを定義する方法です。UserControlスタンドアロン クラスではなく、カスタム クラスを拡張します。(すべてを手動で行うのではなく、VS を介して UserControl を作成することもできます。)

これが完了したら、ユーザー コントロールのインスタンスを作成してフォームに追加するだけです。コントロール自体であるため、これは完全に有効です。

于 2013-10-21T18:11:52.717 に答える