private void ShowCombobox(FormMain.ButtonInfo parentButton, FormMain.GroupsInfo combobox, int index) { // hide previous controls if (index == 0) { panelButtons.Controls.Clear(); } Size size = new Size(buttonWidth, buttonHeight); Point point = CalcButtonLocation(index); // show combobox Label lbl = new Label(); ComboBox cmb = new ComboBox(); //btn.Text = button.m_name; Dictionary <FormMain.ButtonInfo, FormMain.GroupsInfo> data = new Dictionary <FormMain.ButtonInfo, FormMain.GroupsInfo>(); data.Add(parentButton, combobox); cmb.Tag = data; cmb.Size = size; cmb.Location = point; cmb.Enabled = true; cmb.Visible = true; cmb.DropDownStyle = ComboBoxStyle.DropDownList; cmb.Sorted = false; cmb.SelectedIndexChanged += new EventHandler(cmbSelectedIndexChanged); // fill combobox foreach (FormMain.GroupsInfoItem item in combobox.m_vGroupsList) { cmb.Items.Add(item.m_name); } panelButtons.Controls.Add(cmb); // name combobox Label label = new Label(); label.Text = combobox.m_name + ":"; label.Location = new Point(point.X - label.Size.Width - 5, point.Y + 2); label.Visible = true; panelButtons.Controls.Add(label); }
// selection event on dynamic added Combobox private void cmbSelectedIndexChanged(object sender, EventArgs e) { // check selection on all comboboxes in panel bool bIsAllSelected = true; foreach (Control ctrl in panelButtons.Controls) { if (ctrl is ComboBox) { ComboBox cmb = (ComboBox)ctrl; bIsAllSelected = bIsAllSelected && (cmb.SelectedIndex != -1 || cmb.Items.Count == 0); } } // if all selected -> show neext buttons if (bIsAllSelected) { FormMain.ButtonInfo buttonInfo = null; // parent button for all comboboxes // add selected id (in all cmb) in current step foreach (Control ctrl in panelButtons.Controls) { if (ctrl is ComboBox) { ComboBox cmb = (ComboBox)ctrl; Dictionary <FormMain.ButtonInfo, FormMain.GroupsInfo> data = (Dictionary <FormMain.ButtonInfo, FormMain.GroupsInfo>)cmb.Tag; // data contrain only one element foreach (var pair in data) { buttonInfo = pair.Key; FormMain.GroupsInfo groupInfo = pair.Value; long groupInfoItemID = -1; if (groupInfo.m_vGroupsList.Count > 0 && cmb.SelectedIndex < groupInfo.m_vGroupsList.Count) { FormMain.GroupsInfoItem groupInfoItem = groupInfo.m_vGroupsList[cmb.SelectedIndex]; groupInfoItemID = groupInfoItem.m_id; } if (vButtonSteps.Count > 0) { vButtonSteps[vButtonSteps.Count - 1].m_vSelectedGroups.Add(groupInfo.m_id, groupInfoItemID); } } } } // show next buttons bIsLastStep = true; if (buttonInfo != null) { int i = 0; List <FormMain.ButtonInfo> results = _Owner._Owner.m_vButtons.FindAll( delegate(FormMain.ButtonInfo item) { return(item.m_pid == buttonInfo.m_id); } ); foreach (FormMain.ButtonInfo button in results) { ShowButton(button, i++); bIsLastStep = false; } } // if last step if (bIsLastStep) { panelButtons.Controls.Clear(); btnSave.Enabled = true; textbox = new System.Windows.Forms.TextBox(); textbox.Multiline = true; textbox.Location = new Point(5, 5); textbox.Size = new Size(panelButtons.Size.Width - 10, panelButtons.Size.Height - 10); textbox.Visible = true; panelButtons.Controls.Add(textbox); } } }