Odczyt z dynamicznych kontrolek

0

Witam,

Mam problem z dynamicznie tworzonymi kontrolkami, kontrolki się tworzę (poniżej kod, jestem początkującym programistą dlatego proszę o podpowiedź czy tak to powinno się robić),
zapełniłem je również danymi z bazy. Teraz chciałby po naciśnięciu innego klawisza 'zapisz' sprawdzić co zostało wybrane przez użytkownika tylko w kontrolkach ComboBox i taki wybrany text pokazać np. w listBox. Tylko niestety nie wiem jak to zrobić bo kontrolki generują się dynamicznie, nie znam ich nazw, a to ile ich będzie też zależy od tego ile razy użytkownik naciśnie przycisk dodania kontrolek. Czy ma ktoś jakiś pomysł jak to ugryź?

W załączniku zdjęcie które pokazuje jak to wygląda - dodaje przez przycisk dodaj kategorie.

//to jest przycisk do dodawania kontrolek
private void button3_Click(object sender, EventArgs e)
        {
            
            Button tmp_przycisk = sender as Button;
            
            KategoriaControls nowedfdfd = new KategoriaControls(tmp_przycisk.Location, ref zmienaliczącakategorie);
            ComboBox dynamicComboBox = nowedfdfd.pobierzComBox();
            foreach (var tym_kat in lista_kat)
            {
                dynamicComboBox.Items.Add(tym_kat.Nazwa_kat);  
            }

            this.groupBox1.Controls.Add(dynamicComboBox);
            this.groupBox1.Controls.Add(nowedfdfd.pobierzTexBox());
            this.groupBox1.Controls.Add(nowedfdfd.pobierzLabel());
       }

A tutaj klasa tworząca kontrolki


public class KategoriaControls
    {
        ComboBox comboboxKat = null;
        TextBox textboxKat = null;
        Label labelprocent = null;
        Point pointComboBox;
        Point pointTextBox;
        Point pointLabel;

        public KategoriaControls(Point punkt_początkowy, ref int licznik)
        {
            if (licznik == 0)
            {
                pointComboBox.X = punkt_początkowy.X + 60;
                pointComboBox.Y = punkt_początkowy.Y + 40;
                pointTextBox.X = pointComboBox.X + 140;
                pointTextBox.Y = pointComboBox.Y;
                pointLabel.X = pointTextBox.X + 50;
                pointLabel.Y = pointComboBox.Y;
            }
            else
            {
                pointComboBox.X = (punkt_początkowy.X + 60);
                pointComboBox.Y = (punkt_początkowy.Y + 40) + (licznik * 30);
                pointTextBox.X = pointComboBox.X + 140;
                pointTextBox.Y = pointComboBox.Y;
                pointLabel.X = pointTextBox.X + 50;
                pointLabel.Y = pointComboBox.Y;
            }
            comboboxKat = new ComboBox();
            comboboxKat.Name = "przycisk" + licznik.ToString();
            comboboxKat.Location = pointComboBox;
            
            textboxKat = new TextBox();
            Size widthtext = new Size();
            widthtext.Width = 47;
            textboxKat.Size = widthtext;
            textboxKat.Location = pointTextBox;
            
            labelprocent = new Label();
            labelprocent.Text = "%";
            labelprocent.Location = pointLabel;
            
            licznik += 1;
        }
        public ComboBox pobierzComBox()
        {
            return comboboxKat;
        }

        public TextBox pobierzTexBox()
        {
            return textboxKat;
        }

        public Label pobierzLabel()
        {
            return labelprocent;
        }



    }

0

musisz gdzieś te kontrolki zapisać - zamiast comboboxKat = new ComboBox(); użyj np. List<ComboBox> cbList = new List<ComboBox>(); cbList.Add(new ComboBox()); i masz listę wszystkich comboboxów

0

Ale w takim razie tę List<CombBox> muszę przekazać przez referencję bo inaczej przy każdym naciśnięciu klawisza będzie mi się tworzyć nowa lista

1

widzisz - źle Ci podpowiedziałem - nie ten kod - zamiast KategoriaControls nowedfdfd zrób sobie listę List<KategoriaControls> i potem zamiast KategoriaControls nowedfdfd = new KategoriaControls(tmp_przycisk.Location, ref zmienaliczącakategorie); zrób listaKategorii.Add(new KategoriaControls(tmp_przycisk.Location, ref zmienaliczącakategorie)); i możesz się odwoływać poprzez listaKategorii[1].pobierzComBox().xxx

0

Dzięki działa znakomicie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1