NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar

Člen
Avatar
:12.8.2013 23:18

Ahoj, mám problém s flowlayoutpanelem. Přidávání prvků mi funguje. Problém nastane když chci panel projít a nějaký nebo i všechny prvky odstranit, tak mi vždy jeden prvek na panelu zůstane. Zkoušel sem hledat na googlu a nic sem nenašel. Prosím o pomoc, díky

private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox2.SelectedIndex == -1)
            {
                MessageBox.Show("Chyba, vyber položku ze seznamu");
            }
            else
            {
                pocitadlo_comp++;
                TextBox lbl = new TextBox();
                lbl.Name = pocitadlo_comp.ToString();
                lbl.Text = comboBox2.Items[comboBox2.SelectedIndex].ToString();
                lbl.AutoSize = true;
                lbl.Size = comboBox1.Size;
                lbl.ReadOnly = true;

                NumericUpDown nud = new NumericUpDown();
                nud.Name = pocitadlo_comp.ToString();
                nud.Value = 1;
                nud.Minimum = 1;
                nud.AutoSize = true;

                Button btn = new Button();
                btn.Name = pocitadlo_comp.ToString();
                btn.Text = "Odstraň";
                btn.AutoSize = true;
                Size sss = new Size();
                sss.Height = 23;
                sss.Width = 75;
                btn.Size = sss;
                btn.Click += new EventHandler(btn_click);




                flowLayoutPanel1.Controls.Add(lbl);
                flowLayoutPanel1.Controls.Add(nud);
                flowLayoutPanel1.Controls.Add(btn);
                comboBox2.Items.Remove(comboBox2.Items[comboBox2.SelectedIndex]);
            }
        }

        public void btn_click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            foreach (Control c in flowLayoutPanel1.Controls)
            {
                if (c.Name == btn.Name)
                {
                    flowLayoutPanel1.Controls.Remove(c);
                }
            }
        }
 
Odpovědět
12.8.2013 23:18
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:13.8.2013 2:40

A debugoval jsi to ? Popř můžeš zkusit zavolat Dispose místo removování controlů z flw. Hlavně si to debugni a koukni co za kontrol zůstane. Napadá mě taky to, že jak odstraníš ten objekt, tak je hned null, to znamená, že btn == null a ta podmínka je hned false. Uložil bych si pouze to jméno toho tlačítka.

 
Nahoru Odpovědět
13.8.2013 2:40
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:13.8.2013 2:47

Edit jsem už nestihl, ale ten kód bys mohl optimalizovat, že by sis udělal vlastní UserControl, tam nacpal ty 3 komponenty, které tam jsou vždycky a to Removování bys buď udělal event nebo přímo implementoval do té komponenty pomocí toho Dispose. Nemusel bys řešit nic jako iteraci všech kontrolů v tom flw.

 
Nahoru Odpovědět
13.8.2013 2:47
Avatar

Člen
Avatar
:13.8.2013 7:47

To už jsem zkoušel všechno. Problém je, že kód nefunguje i když odstraním podmínku a nechám odstranit všechny prvky na flw. Zkoušel sem už snad vše. Jediný dobrý výsledek mi vyšel když sem nechal vypsat messagem Name všech komponent. To mi vždy vypsalo všechny. Když sem přidal odstranění těch prvků, vždy mi jeden zůstane a vždy je to NumericUpDown.

 
Nahoru Odpovědět
13.8.2013 7:47
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.