动态创建按钮的设计模式

时间:2016-05-24 07:49:13

标签: c# oop design-patterns user-controls

我创建了一个自定义用户控件,可以将组合框添加到自身。

我的自定义用户控件有1个按钮,可添加两个组合框。

点击它会在最后两个下面添加2个组合框。

当在任何组合框中更改所选索引时,它将使用每个框中的选定值运行计算。

到目前为止,这是我的代码......

 public partial class PlateSectionAdder : UserControl
    {

        private List<Dictionary<string, CueComboBox>> listOfTwoCombos = new List<Dictionary<string, CueComboBox>>();

        public List<string> ColList { get; }
        public List<string> PlateList { get; }


        private int count = 1;
        private int gap = 3;
        private int edge = 5;

        private Button btnAdd = new Button();


        public PlateSectionAdder(List<string> collist, List<string> platelist)
        {
            InitializeComponent();
            this.ColList = collist;
            this.PlateList = platelist;

            btnAdd.FlatStyle = FlatStyle.Flat;
            btnAdd.Top = edge / 2;
                btnAdd.Left = edge;
                btnAdd.Width = this.Width - (edge * 2);
            btnAdd.Click += BtnAdd_Click;
                this.Controls.Add(btnAdd);
        }

        private void BtnAdd_Click(object sender, EventArgs e)
        {
            CueComboBox cmbCols = new CueComboBox();
                cmbCols.DataSource = this.ColList;
                cmbCols.Top = (btnAdd.Bottom + edge) * count;
                cmbCols.Left = edge;
                cmbCols.Width = btnAdd.Width / 2 - gap;
            cmbCols.SelectedIndexChanged += CalculatePlateSections;

            CueComboBox cmbPlates = new CueComboBox();
                cmbPlates.DataSource = this.PlateList;
                cmbPlates.Top = (btnAdd.Bottom + edge) * count;
                cmbPlates.Left = cmbCols.Right + gap;
                cmbPlates.Width = btnAdd.Width / 2 - gap;
                cmbCols.DataSource = ColList;


            this.Controls.Add(cmbCols);
            this.Controls.Add(cmbPlates);

            this.Height = btnAdd.Height + (cmbCols.Height * count) + edge + edge + 1;
                cmbCols.DataSource = ColList;
                cmbPlates.DataSource = PlateList;


            cmbPlates.SelectedIndexChanged += CalculatePlateSections;

            count++;
        }

        private void CalculatePlateSections(object sender, EventArgs e)
        {
            MessageBox.Show("Test");
        }

组合框似乎是同一个实例的副本,而不是独立的,我认为使用new关键字它们每个都有自己的实例。

我确信那里有一个适合的设计模式,但不确定是哪一个。

看一下构建器模式,但它似乎不是我想要的。

如果有任何不清楚的事情让我知道,我会澄清。

0 个答案:

没有答案